ANDROID: sdcardfs: Don't iput if we didn't igrab
authorDaniel Roseberg <drosen@google.com>
Tue, 9 May 2017 20:36:35 +0000 (13:36 -0700)
committerDaniel Rosenberg <drosen@google.com>
Tue, 30 Jan 2018 03:40:10 +0000 (19:40 -0800)
If we fail to get top, top is either NULL, or igrab found
that we're in the process of freeing that inode, and did
not grab it. Either way, we didn't grab it, and have no
business putting it.

Signed-off-by: Daniel Rosenberg <drosen@google.com>
Bug: 38117720
Change-Id: Ie2f587483b9abb5144263156a443e89bc69b767b

fs/sdcardfs/inode.c

index 97120e85e31c934370cbc842744552df947d2850..1beda0c7772b8bc121fabf3909652b38d118a9c0 100644 (file)
@@ -625,11 +625,8 @@ static int sdcardfs_permission(struct vfsmount *mnt, struct inode *inode, int ma
        if (IS_ERR(mnt))
                return PTR_ERR(mnt);
 
-       if (!top) {
-               release_top(SDCARDFS_I(inode));
-               WARN(1, "Top value was null!\n");
+       if (!top)
                return -EINVAL;
-       }
 
        /*
         * Permission check on sdcardfs inode.
@@ -704,10 +701,8 @@ static int sdcardfs_setattr(struct vfsmount *mnt, struct dentry *dentry, struct
        inode = d_inode(dentry);
        top = grab_top(SDCARDFS_I(inode));
 
-       if (!top) {
-               release_top(SDCARDFS_I(inode));
+       if (!top)
                return -EINVAL;
-       }
 
        /*
         * Permission check on sdcardfs inode.