From d63242bd69a0e3eaa39afd644b634f60f384b278 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Sep 2022 07:30:44 +0200 Subject: OvmfPkg/QemuBootOrderLib: allow slash in rom filenames See comment for details. Needed to avoid the parser abort, so we can continue parsing the bootorder fw_cfg file. Signed-off-by: Gerd Hoffmann Reviewed-by: Ard Biesheuvel --- OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'OvmfPkg') diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c index 398de7f..374c6d8 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c @@ -432,6 +432,8 @@ ParseOfwNode ( OUT BOOLEAN *IsFinal ) { + BOOLEAN AcceptSlash = FALSE; + // // A leading slash is expected. End of string is tolerated. // @@ -464,6 +466,21 @@ ParseOfwNode ( return RETURN_INVALID_PARAMETER; } + if (SubstringEq (OfwNode->DriverName, "rom")) { + // + // bug compatibility hack + // + // qemu passes fw_cfg filenames as rom unit address. + // The filenames have slashes: + // /rom@genroms/linuxboot_dma.bin + // + // Alow slashes in the unit address to avoid the parser trip up, + // so we can successfully parse the following lines (the rom + // entries themself are ignored). + // + AcceptSlash = TRUE; + } + // // unit-address // @@ -475,7 +492,7 @@ ParseOfwNode ( OfwNode->UnitAddress.Ptr = *Ptr; OfwNode->UnitAddress.Len = 0; - while (IsPrintNotDelim (**Ptr)) { + while (IsPrintNotDelim (**Ptr) || (AcceptSlash && **Ptr == '/')) { ++*Ptr; ++OfwNode->UnitAddress.Len; } -- cgit v1.1