Skip to content

Commit

Permalink
efivarfs: Fix return value of efivarfs_file_write()
Browse files Browse the repository at this point in the history
We're stuffing a variable of type size_t (unsigned) into a ssize_t
(signed) which, even though both types should be the same number of
bits, it's just asking for sign issues to be introduced.

Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
Reported-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
  • Loading branch information
Matt Fleming committed Oct 30, 2012
1 parent aeeaa8d commit cfcf2f1
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions drivers/firmware/efivars.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ static ssize_t efivarfs_file_write(struct file *file,
struct inode *inode = file->f_mapping->host;
unsigned long datasize = count - sizeof(attributes);
unsigned long newdatasize;
ssize_t bytes = 0;

if (count < sizeof(attributes))
return -EINVAL;
Expand All @@ -706,22 +707,22 @@ static ssize_t efivarfs_file_write(struct file *file,
efivars = var->efivars;

if (copy_from_user(&attributes, userbuf, sizeof(attributes))) {
count = -EFAULT;
bytes = -EFAULT;
goto out;
}

if (attributes & ~(EFI_VARIABLE_MASK)) {
count = -EINVAL;
bytes = -EINVAL;
goto out;
}

if (copy_from_user(data, userbuf + sizeof(attributes), datasize)) {
count = -EFAULT;
bytes = -EFAULT;
goto out;
}

if (validate_var(&var->var, data, datasize) == false) {
count = -EINVAL;
bytes = -EINVAL;
goto out;
}

Expand All @@ -744,6 +745,8 @@ static ssize_t efivarfs_file_write(struct file *file,
return efi_status_to_err(status);
}

bytes = count;

/*
* Writing to the variable may have caused a change in size (which
* could either be an append or an overwrite), or the variable to be
Expand Down Expand Up @@ -778,7 +781,7 @@ static ssize_t efivarfs_file_write(struct file *file,
out:
kfree(data);

return count;
return bytes;
}

static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
Expand Down

0 comments on commit cfcf2f1

Please sign in to comment.