summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2022-10-06 14:36:02 +0300
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2022-10-06 23:54:57 +0300
commit01caf28778bfe04838bd4c548ccc975f5a2f59ee (patch)
tree7f16f7b80877f986e66a5c517f76e206a168c580 /lib
parent80fadf4af6413f9668f6cfaea39f7a101103ce9e (diff)
downloadu-boot-01caf28778bfe04838bd4c548ccc975f5a2f59ee.tar.xz
efi_loader: efi_dp_part_node check dp_alloc return value
dp_alloc() may return NULL. This needs to be caught. Fixes: 98d48bdf415e ("efi_loader: provide a function to create a partition node") Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_device_path.c3
-rw-r--r--lib/efi_loader/efi_disk.c5
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index ebffb77122..acae007f26 100644
--- a/lib/efi_loader/efi_device_path.c
+++ b/lib/efi_loader/efi_device_path.c
@@ -936,7 +936,8 @@ struct efi_device_path *efi_dp_part_node(struct blk_desc *desc, int part)
dpsize = sizeof(struct efi_device_path_hard_drive_path);
buf = dp_alloc(dpsize);
- dp_part_node(buf, desc, part);
+ if (buf)
+ dp_part_node(buf, desc, part);
return buf;
}
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
index 39ea1a68a6..79b28097b6 100644
--- a/lib/efi_loader/efi_disk.c
+++ b/lib/efi_loader/efi_disk.c
@@ -415,6 +415,11 @@ static efi_status_t efi_disk_add_dev(
struct efi_handler *handler;
void *protocol_interface;
+ if (!node) {
+ ret = EFI_OUT_OF_RESOURCES;
+ goto error;
+ }
+
/* Parent must expose EFI_BLOCK_IO_PROTOCOL */
ret = efi_search_protocol(parent, &efi_block_io_guid, &handler);
if (ret != EFI_SUCCESS)