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: 647636e175
Pull Request: https://github.com/freebsd/freebsd-src/pull/581
This commit is contained in:
parent
81a659e364
commit
b782b7884c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user