]> Pileus Git - ~andy/linux/blobdiff - arch/x86/platform/efi/efi.c
Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[~andy/linux] / arch / x86 / platform / efi / efi.c
index 5ae2eb09419ec54d2ac7618904c31d961149df43..b410b71bdcf767fc97fbb8f08dcaed1ea46f4c1f 100644 (file)
@@ -929,6 +929,13 @@ void __init efi_enter_virtual_mode(void)
                        va = efi_ioremap(md->phys_addr, size,
                                         md->type, md->attribute);
 
+               if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
+                       if (!va)
+                               pr_err("ioremap of 0x%llX failed!\n",
+                                      (unsigned long long)md->phys_addr);
+                       continue;
+               }
+
                md->virt_addr = (u64) (unsigned long) va;
 
                if (!va) {
@@ -1069,7 +1076,10 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)
                 * that by attempting to use more space than is available.
                 */
                unsigned long dummy_size = remaining_size + 1024;
-               void *dummy = kmalloc(dummy_size, GFP_ATOMIC);
+               void *dummy = kzalloc(dummy_size, GFP_ATOMIC);
+
+               if (!dummy)
+                       return EFI_OUT_OF_RESOURCES;
 
                status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID,
                                          EFI_VARIABLE_NON_VOLATILE |
@@ -1089,6 +1099,8 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)
                                         0, dummy);
                }
 
+               kfree(dummy);
+
                /*
                 * The runtime code may now have triggered a garbage collection
                 * run, so check the variable info again