| From 50c6e282bdf5e8dabf8d7cf7b162545a55645fd9 Mon Sep 17 00:00:00 2001 |
| From: Christoph Hellwig <hch@lst.de> |
| Date: Sun, 4 May 2014 13:03:32 +0200 |
| Subject: posix_acl: handle NULL ACL in posix_acl_equiv_mode |
| |
| From: Christoph Hellwig <hch@lst.de> |
| |
| commit 50c6e282bdf5e8dabf8d7cf7b162545a55645fd9 upstream. |
| |
| Various filesystems don't bother checking for a NULL ACL in |
| posix_acl_equiv_mode, and thus can dereference a NULL pointer when it |
| gets passed one. This usually happens from the NFS server, as the ACL tools |
| never pass a NULL ACL, but instead of one representing the mode bits. |
| |
| Instead of adding boilerplat to all filesystems put this check into one place, |
| which will allow us to remove the check from other filesystems as well later |
| on. |
| |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Reported-by: Ben Greear <greearb@candelatech.com> |
| Reported-by: Marco Munderloh <munderl@tnt.uni-hannover.de>, |
| Cc: Chuck Lever <chuck.lever@oracle.com> |
| Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/posix_acl.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/fs/posix_acl.c |
| +++ b/fs/posix_acl.c |
| @@ -158,6 +158,12 @@ posix_acl_equiv_mode(const struct posix_ |
| umode_t mode = 0; |
| int not_equiv = 0; |
| |
| + /* |
| + * A null ACL can always be presented as mode bits. |
| + */ |
| + if (!acl) |
| + return 0; |
| + |
| FOREACH_ACL_ENTRY(pa, acl, pe) { |
| switch (pa->e_tag) { |
| case ACL_USER_OBJ: |