From: Eric Biggers <[email protected]>

ubifs_symlink() forgot to free the kmalloc()'ed buffer holding the
encrypted symlink target, creating a memory leak.  Fix it.

(UBIFS could actually encrypt directly into ui->data, removing the
temporary buffer, but that is left for the patch that switches to use
the symlink helper functions.)

Fixes: ca7f85be8d6c ("ubifs: Add support for encrypted symlinks")
Cc: <[email protected]> # v4.10+
Signed-off-by: Eric Biggers <[email protected]>
---
 fs/ubifs/dir.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index 417fe0b29f23..ef820f803176 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -1216,10 +1216,8 @@ static int ubifs_symlink(struct inode *dir, struct 
dentry *dentry,
                ostr.len = disk_link.len;
 
                err = fscrypt_fname_usr_to_disk(inode, &istr, &ostr);
-               if (err) {
-                       kfree(sd);
+               if (err)
                        goto out_inode;
-               }
 
                sd->len = cpu_to_le16(ostr.len);
                disk_link.name = (char *)sd;
@@ -1251,11 +1249,10 @@ static int ubifs_symlink(struct inode *dir, struct 
dentry *dentry,
                goto out_cancel;
        mutex_unlock(&dir_ui->ui_mutex);
 
-       ubifs_release_budget(c, &req);
        insert_inode_hash(inode);
        d_instantiate(dentry, inode);
-       fscrypt_free_filename(&nm);
-       return 0;
+       err = 0;
+       goto out_fname;
 
 out_cancel:
        dir->i_size -= sz_change;
@@ -1268,6 +1265,7 @@ static int ubifs_symlink(struct inode *dir, struct dentry 
*dentry,
        fscrypt_free_filename(&nm);
 out_budg:
        ubifs_release_budget(c, &req);
+       kfree(sd);
        return err;
 }
 
-- 
2.15.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to