From 1462d2451a36aada0e5eec2a242aeb9366f6df44 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 1 Feb 2022 15:28:33 +0100 Subject: [PATCH] efi: use assert_se() instead of assert() to guard for OOM issues in EFI code --- src/boot/efi/util.h | 13 ++++++------- src/boot/efi/xbootldr.c | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index 40ce98c6110..3d659f7043f 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -27,16 +27,15 @@ #define xnew_alloc(type, n, alloc) \ ({ \ UINTN _alloc_size; \ - if (__builtin_mul_overflow(sizeof(type), (n), &_alloc_size)) \ - assert_not_reached(); \ + assert_se(!__builtin_mul_overflow(sizeof(type), (n), &_alloc_size)); \ (type *) alloc(_alloc_size); \ }) -#define xallocate_pool(size) ASSERT_PTR(AllocatePool(size)) -#define xallocate_zero_pool(size) ASSERT_PTR(AllocateZeroPool(size)) -#define xreallocate_pool(p, old_size, new_size) ASSERT_PTR(ReallocatePool((p), (old_size), (new_size))) -#define xpool_print(fmt, ...) ((CHAR16 *) ASSERT_PTR(PoolPrint((fmt), ##__VA_ARGS__))) -#define xstrdup(str) ((CHAR16 *) ASSERT_PTR(StrDuplicate(str))) +#define xallocate_pool(size) ASSERT_SE_PTR(AllocatePool(size)) +#define xallocate_zero_pool(size) ASSERT_SE_PTR(AllocateZeroPool(size)) +#define xreallocate_pool(p, old_size, new_size) ASSERT_SE_PTR(ReallocatePool((p), (old_size), (new_size))) +#define xpool_print(fmt, ...) ((CHAR16 *) ASSERT_SE_PTR(PoolPrint((fmt), ##__VA_ARGS__))) +#define xstrdup(str) ((CHAR16 *) ASSERT_SE_PTR(StrDuplicate(str))) #define xnew(type, n) xnew_alloc(type, (n), xallocate_pool) #define xnew0(type, n) xnew_alloc(type, (n), xallocate_zero_pool) diff --git a/src/boot/efi/xbootldr.c b/src/boot/efi/xbootldr.c index 49d5707e02f..6fa7e49e5de 100644 --- a/src/boot/efi/xbootldr.c +++ b/src/boot/efi/xbootldr.c @@ -226,7 +226,7 @@ static EFI_STATUS find_device(EFI_HANDLE *device, EFI_DEVICE_PATH **ret_device_p } /* Patch in the data we found */ - EFI_DEVICE_PATH *xboot_path = ASSERT_PTR(DuplicateDevicePath(partition_path)); + EFI_DEVICE_PATH *xboot_path = ASSERT_SE_PTR(DuplicateDevicePath(partition_path)); CopyMem((UINT8 *) xboot_path + ((UINT8 *) part_node - (UINT8 *) partition_path), &hd, sizeof(hd)); *ret_device_path = xboot_path; return EFI_SUCCESS; -- 2.47.3