Fix the efi serial console in the Arm models.
On some UEFI implementations the ConsOut EFI variable is not a device path end type so we never move to the next node. Fix this by always incrementing the device path node pointer, with a sanity check that the node length is large enough so no two nodes overlap. While here return failure on malloc failure rather than a NULL pointer dereference. Reviewed by: tsoome, imp (previous version) Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D25202
This commit is contained in:
parent
a287a973e3
commit
0e281c4f0d
@ -216,8 +216,9 @@ comc_get_con_serial_handle(const char *name)
|
||||
status = efi_global_getenv(name, buf, &sz);
|
||||
if (status == EFI_BUFFER_TOO_SMALL) {
|
||||
buf = malloc(sz);
|
||||
if (buf != NULL)
|
||||
status = efi_global_getenv(name, buf, &sz);
|
||||
if (buf == NULL)
|
||||
return (NULL);
|
||||
status = efi_global_getenv(name, buf, &sz);
|
||||
}
|
||||
if (status != EFI_SUCCESS) {
|
||||
free(buf);
|
||||
@ -232,17 +233,13 @@ comc_get_con_serial_handle(const char *name)
|
||||
free(buf);
|
||||
return (handle);
|
||||
}
|
||||
if (IsDevicePathEndType(node) &&
|
||||
DevicePathSubType(node) ==
|
||||
END_INSTANCE_DEVICE_PATH_SUBTYPE) {
|
||||
/*
|
||||
* Start of next device path in list.
|
||||
*/
|
||||
node = NextDevicePathNode(node);
|
||||
continue;
|
||||
}
|
||||
if (IsDevicePathEnd(node))
|
||||
|
||||
/* Sanity check the node before moving to the next node. */
|
||||
if (DevicePathNodeLength(node) < sizeof(*node))
|
||||
break;
|
||||
|
||||
/* Start of next device path in list. */
|
||||
node = NextDevicePathNode(node);
|
||||
}
|
||||
free(buf);
|
||||
return (NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user