aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firmware/efi/capsule.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/firmware/efi/capsule.c b/drivers/firmware/efi/capsule.c
index e530540f368c..53b9fd2293ee 100644
--- a/drivers/firmware/efi/capsule.c
+++ b/drivers/firmware/efi/capsule.c
@@ -86,33 +86,26 @@ bool efi_capsule_pending(int *reset_type)
86 */ 86 */
87int efi_capsule_supported(efi_guid_t guid, u32 flags, size_t size, int *reset) 87int efi_capsule_supported(efi_guid_t guid, u32 flags, size_t size, int *reset)
88{ 88{
89 efi_capsule_header_t *capsule; 89 efi_capsule_header_t capsule;
90 efi_capsule_header_t *cap_list[] = { &capsule };
90 efi_status_t status; 91 efi_status_t status;
91 u64 max_size; 92 u64 max_size;
92 int rv = 0;
93 93
94 if (flags & ~EFI_CAPSULE_SUPPORTED_FLAG_MASK) 94 if (flags & ~EFI_CAPSULE_SUPPORTED_FLAG_MASK)
95 return -EINVAL; 95 return -EINVAL;
96 96
97 capsule = kmalloc(sizeof(*capsule), GFP_KERNEL); 97 capsule.headersize = capsule.imagesize = sizeof(capsule);
98 if (!capsule) 98 memcpy(&capsule.guid, &guid, sizeof(efi_guid_t));
99 return -ENOMEM; 99 capsule.flags = flags;
100
101 capsule->headersize = capsule->imagesize = sizeof(*capsule);
102 memcpy(&capsule->guid, &guid, sizeof(efi_guid_t));
103 capsule->flags = flags;
104 100
105 status = efi.query_capsule_caps(&capsule, 1, &max_size, reset); 101 status = efi.query_capsule_caps(cap_list, 1, &max_size, reset);
106 if (status != EFI_SUCCESS) { 102 if (status != EFI_SUCCESS)
107 rv = efi_status_to_err(status); 103 return efi_status_to_err(status);
108 goto out;
109 }
110 104
111 if (size > max_size) 105 if (size > max_size)
112 rv = -ENOSPC; 106 return -ENOSPC;
113out: 107
114 kfree(capsule); 108 return 0;
115 return rv;
116} 109}
117EXPORT_SYMBOL_GPL(efi_capsule_supported); 110EXPORT_SYMBOL_GPL(efi_capsule_supported);
118 111