aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2014-03-17 05:17:28 -0400
committerMatt Fleming <matt.fleming@intel.com>2014-04-17 08:53:34 -0400
commite003bbee2a6a19a4c733335989284caf1b179e0d (patch)
tree80c92271ca01ceaabdbd43d13bcda29b11789b2a /drivers/firmware
parentbafc84d539c0ffa916037840df54428623abc3e6 (diff)
efivars: Check size of user object
Unbelieavably there are no checks to see whether the data structure passed to 'new_var' and 'del_var' is the size that we expect. Let's add some for better robustness. Cc: Mike Waychison <mikew@google.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/efi/efivars.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c
index 06ec6ee1c58a..2c21cccc2572 100644
--- a/drivers/firmware/efi/efivars.c
+++ b/drivers/firmware/efi/efivars.c
@@ -347,6 +347,9 @@ static ssize_t efivar_create(struct file *filp, struct kobject *kobj,
347 if (!capable(CAP_SYS_ADMIN)) 347 if (!capable(CAP_SYS_ADMIN))
348 return -EACCES; 348 return -EACCES;
349 349
350 if (count != sizeof(*new_var))
351 return -EINVAL;
352
350 attributes = new_var->Attributes; 353 attributes = new_var->Attributes;
351 size = new_var->DataSize; 354 size = new_var->DataSize;
352 data = new_var->Data; 355 data = new_var->Data;
@@ -395,6 +398,9 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
395 if (!capable(CAP_SYS_ADMIN)) 398 if (!capable(CAP_SYS_ADMIN))
396 return -EACCES; 399 return -EACCES;
397 400
401 if (count != sizeof(*del_var))
402 return -EINVAL;
403
398 name = del_var->VariableName; 404 name = del_var->VariableName;
399 vendor = del_var->VendorGuid; 405 vendor = del_var->VendorGuid;
400 406