|
@@ -21,7 +21,7 @@ static ssize_t efivarfs_file_write(struct file *file,
|
|
|
u32 attributes;
|
|
|
struct inode *inode = file->f_mapping->host;
|
|
|
unsigned long datasize = count - sizeof(attributes);
|
|
|
- ssize_t bytes = 0;
|
|
|
+ ssize_t bytes;
|
|
|
bool set = false;
|
|
|
|
|
|
if (count < sizeof(attributes))
|
|
@@ -33,14 +33,9 @@ static ssize_t efivarfs_file_write(struct file *file,
|
|
|
if (attributes & ~(EFI_VARIABLE_MASK))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- data = kmalloc(datasize, GFP_KERNEL);
|
|
|
- if (!data)
|
|
|
- return -ENOMEM;
|
|
|
-
|
|
|
- if (copy_from_user(data, userbuf + sizeof(attributes), datasize)) {
|
|
|
- bytes = -EFAULT;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ data = memdup_user(userbuf + sizeof(attributes), datasize);
|
|
|
+ if (IS_ERR(data))
|
|
|
+ return PTR_ERR(data);
|
|
|
|
|
|
bytes = efivar_entry_set_get_size(var, attributes, &datasize,
|
|
|
data, &set);
|