{
        int ret, len;
        unsigned long tmp_addr;
+       unsigned long start_pfn, end_pfn;
        size_t tmp_size;
        const void *prop;
 
        if (ret)
                return ret;
 
+       /* Do some sanity on the returned size for the ima-kexec buffer */
+       if (!tmp_size)
+               return -ENOENT;
+
+       /*
+        * Calculate the PFNs for the buffer and ensure
+        * they are with in addressable memory.
+        */
+       start_pfn = PHYS_PFN(tmp_addr);
+       end_pfn = PHYS_PFN(tmp_addr + tmp_size - 1);
+       if (!page_is_ram(start_pfn) || !page_is_ram(end_pfn)) {
+               pr_warn("IMA buffer at 0x%lx, size = 0x%zx beyond memory\n",
+                       tmp_addr, tmp_size);
+               return -EINVAL;
+       }
+
        *addr = __va(tmp_addr);
        *size = tmp_size;