jfs: Fix early release of acl in jfs_get_acl
authorStefan Bader <stefan.bader@canonical.com>
Thu, 23 Jul 2009 09:26:05 +0000 (11:26 +0200)
committerDave Kleikamp <shaggy@linux.vnet.ibm.com>
Thu, 23 Jul 2009 16:08:36 +0000 (11:08 -0500)
BugLink: http://bugs.launchpad.net/ubuntu/+bug/396780
Commit 073aaa1b142461d91f83da66db1184d7c1b1edea "helpers for acl
caching + switch to those" introduced new helper functions for
acl handling but seems to have introduced a regression for jfs as
the acl is released before returning it to the caller, instead of
leaving this for the caller to do.
This causes the acl object to be used after freeing it, leading
to kernel panics in completely different places.

Thanks to Christophe Dumez for reporting and bisecting into this.

Reported-by: Christophe Dumez <dchris@gmail.com>
Tested-by: Christophe Dumez <dchris@gmail.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
fs/jfs/acl.c

index 91fa3ad6e8c2dc01144bcf1ab56c250a9c9e54bb..a29c7c3e3fb81a58148c93e0dd56e858bac04939 100644 (file)
@@ -67,10 +67,8 @@ static struct posix_acl *jfs_get_acl(struct inode *inode, int type)
                acl = posix_acl_from_xattr(value, size);
        }
        kfree(value);
-       if (!IS_ERR(acl)) {
+       if (!IS_ERR(acl))
                set_cached_acl(inode, type, acl);
-               posix_acl_release(acl);
-       }
        return acl;
 }