git: b782b7884c8a - main - libefivar: Fix FromText bug for multi-instance devicepath
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 27 Feb 2022 16:47:35 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=b782b7884c8aa19cb2dcb6ece6909e9f05173d72 commit b782b7884c8aa19cb2dcb6ece6909e9f05173d72 Author: Jose Luis Duran <jlduran@gmail.com> AuthorDate: 2022-02-25 14:39:12 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2022-02-27 16:11:59 +0000 libefivar: Fix FromText bug for multi-instance devicepath UefiDevicePathLibConvertTextToDevicePath correctly detects when it has hit a ',' splicing together multiple paths. However, the code that tries to cope with it: {code} if (IsInstanceEnd) { DeviceNode = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool ( END_DEVICE_PATH_LENGTH); ASSERT (DeviceNode != NULL); SetDevicePathEndNode (DeviceNode); NewDevicePath = AppendDevicePathNode (DevicePath, DeviceNode); FreePool (DevicePath); FreePool (DeviceNode); DevicePath = NewDevicePath; } {code} causes a problem. The END node that's appended it the node for the entire list. So when the node is appended in AppendDevicePathNode, it winds up disappearing. This leads to the path 'PciRoot(0x0),PciRoot(0x0)' parsing as if 'PciRoot(0x0)/PciRoot(0x0)' were specified. These are two very different things. NOTE: This fix was already committed. It has been included with the sole intention of reducing diffs with upstream. Upstream Bug: https://bugzilla.tianocore.org/show_bug.cgi?id=419 Obtained from: https://github.com/tianocore/edk2/commit/647636e1750b07110ed807f455cb9c8b7d089f75 Pull Request: https://github.com/freebsd/freebsd-src/pull/581 --- lib/libefivar/efivar-dp-parse.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/libefivar/efivar-dp-parse.c b/lib/libefivar/efivar-dp-parse.c index 4040b001708d..82f9c6027d32 100644 --- a/lib/libefivar/efivar-dp-parse.c +++ b/lib/libefivar/efivar-dp-parse.c @@ -3680,7 +3680,6 @@ UefiDevicePathLibConvertTextToDevicePath ( DeviceNode = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool (END_DEVICE_PATH_LENGTH); ASSERT (DeviceNode != NULL); SetDevicePathEndNode (DeviceNode); - // Fix from https://bugzilla.tianocore.org/show_bug.cgi?id=419 DeviceNode->SubType = END_INSTANCE_DEVICE_PATH_SUBTYPE; NewDevicePath = AppendDevicePathNode (DevicePath, DeviceNode);