diff options
-rw-r--r-- | drivers/firmware/efi/capsule.c | 29 |
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 | */ |
87 | int efi_capsule_supported(efi_guid_t guid, u32 flags, size_t size, int *reset) | 87 | int 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; |
113 | out: | 107 | |
114 | kfree(capsule); | 108 | return 0; |
115 | return rv; | ||
116 | } | 109 | } |
117 | EXPORT_SYMBOL_GPL(efi_capsule_supported); | 110 | EXPORT_SYMBOL_GPL(efi_capsule_supported); |
118 | 111 | ||