diff options
Diffstat (limited to 'drivers/firmware')
-rw-r--r-- | drivers/firmware/efivars.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index b7c9a3261dc4..6e5f367145f5 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c | |||
@@ -866,7 +866,7 @@ static void efivarfs_hex_to_guid(const char *str, efi_guid_t *guid) | |||
866 | static int efivarfs_create(struct inode *dir, struct dentry *dentry, | 866 | static int efivarfs_create(struct inode *dir, struct dentry *dentry, |
867 | umode_t mode, bool excl) | 867 | umode_t mode, bool excl) |
868 | { | 868 | { |
869 | struct inode *inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0); | 869 | struct inode *inode; |
870 | struct efivars *efivars = &__efivars; | 870 | struct efivars *efivars = &__efivars; |
871 | struct efivar_entry *var; | 871 | struct efivar_entry *var; |
872 | int namelen, i = 0, err = 0; | 872 | int namelen, i = 0, err = 0; |
@@ -874,13 +874,15 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry, | |||
874 | if (dentry->d_name.len < 38) | 874 | if (dentry->d_name.len < 38) |
875 | return -EINVAL; | 875 | return -EINVAL; |
876 | 876 | ||
877 | inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0); | ||
877 | if (!inode) | 878 | if (!inode) |
878 | return -ENOSPC; | 879 | return -ENOSPC; |
879 | 880 | ||
880 | var = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL); | 881 | var = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL); |
881 | 882 | if (!var) { | |
882 | if (!var) | 883 | err = -ENOMEM; |
883 | return -ENOMEM; | 884 | goto out; |
885 | } | ||
884 | 886 | ||
885 | namelen = dentry->d_name.len - GUID_LEN; | 887 | namelen = dentry->d_name.len - GUID_LEN; |
886 | 888 | ||
@@ -908,8 +910,10 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry, | |||
908 | d_instantiate(dentry, inode); | 910 | d_instantiate(dentry, inode); |
909 | dget(dentry); | 911 | dget(dentry); |
910 | out: | 912 | out: |
911 | if (err) | 913 | if (err) { |
912 | kfree(var); | 914 | kfree(var); |
915 | iput(inode); | ||
916 | } | ||
913 | return err; | 917 | return err; |
914 | } | 918 | } |
915 | 919 | ||