diff options
author | Christian Brauner <brauner@kernel.org> | 2022-10-28 12:45:10 +0200 |
---|---|---|
committer | Christian Brauner (Microsoft) <brauner@kernel.org> | 2022-10-28 12:45:10 +0200 |
commit | cb2144d66b0b24fd1b880fc72678ba21ca414dab (patch) | |
tree | f0a1fb2c560176b627c3c9846aac807a176f8e05 /fs/cifs/cifsacl.c | |
parent | a351b1f444187312bb42479cb26e82f26fc481d2 (diff) |
cifs: check whether acl is valid early
Dan reported that acl is dereferenced before being checked and this is a
valid problem. Fix it be erroring out early instead of doing it later after
we've already relied on acl to be a valid pointer.
Fixes: dc1af4c4b472 ("cifs: implement set acl method")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Diffstat (limited to 'fs/cifs/cifsacl.c')
-rw-r--r-- | fs/cifs/cifsacl.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index 6a9f03c882dc..c647f0d56518 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c @@ -1764,6 +1764,10 @@ int cifs_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry, rc = PTR_ERR(full_path); goto out; } + + if (!acl) + goto out; + /* return dos attributes as pseudo xattr */ /* return alt name if available as pseudo attr */ @@ -1778,8 +1782,6 @@ int cifs_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry, switch (type) { case ACL_TYPE_ACCESS: - if (!acl) - goto out; if (sb->s_flags & SB_POSIXACL) rc = cifs_do_set_acl(xid, pTcon, full_path, acl, ACL_TYPE_ACCESS, @@ -1788,8 +1790,6 @@ int cifs_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry, break; case ACL_TYPE_DEFAULT: - if (!acl) - goto out; if (sb->s_flags & SB_POSIXACL) rc = cifs_do_set_acl(xid, pTcon, full_path, acl, ACL_TYPE_DEFAULT, |