diff --git a/shim.c b/shim.c index 38cc452..e8401f8 100644 --- a/shim.c +++ b/shim.c @@ -50,6 +50,8 @@ #include +#include + #define FALLBACK L"\\fb" EFI_ARCH L".efi" #define MOK_MANAGER L"\\mm" EFI_ARCH L".efi" @@ -111,11 +113,17 @@ typedef struct { /* * Perform basic bounds checking of the intra-image pointers */ -static void *ImageAddress (void *image, unsigned int size, unsigned int address) +static void *ImageAddress (void *image, uint64_t size, uint64_t address) { + /* ensure our local pointer isn't bigger than our size */ if (address > size) return NULL; + /* Insure our math won't overflow */ + if (UINT64_MAX - address < (uint64_t)image) + return NULL; + + /* return the absolute pointer */ return image + address; }