| From b8cb62f82103083a6e8fa5470bfe634a2c06514d Mon Sep 17 00:00:00 2001 |
| From: Ben Hutchings <ben@decadent.org.uk> |
| Date: Sun, 16 Jun 2013 21:27:12 +0100 |
| Subject: x86/efi: Fix dummy variable buffer allocation |
| |
| From: Ben Hutchings <ben@decadent.org.uk> |
| |
| commit b8cb62f82103083a6e8fa5470bfe634a2c06514d upstream. |
| |
| 1. Check for allocation failure |
| 2. Clear the buffer contents, as they may actually be written to flash |
| 3. Don't leak the buffer |
| |
| Compile-tested only. |
| |
| [ Tested successfully on my buggy ASUS machine - Matt ] |
| |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: Matt Fleming <matt.fleming@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/platform/efi/efi.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/arch/x86/platform/efi/efi.c |
| +++ b/arch/x86/platform/efi/efi.c |
| @@ -1059,7 +1059,10 @@ efi_status_t efi_query_variable_store(u3 |
| * 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 | |
| @@ -1079,6 +1082,8 @@ efi_status_t efi_query_variable_store(u3 |
| 0, dummy); |
| } |
| |
| + kfree(dummy); |
| + |
| /* |
| * The runtime code may now have triggered a garbage collection |
| * run, so check the variable info again |