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: dc1af4c4b4
("cifs: implement set acl method")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
This commit is contained in:
parent
a351b1f444
commit
cb2144d66b
@ -1764,6 +1764,10 @@ int cifs_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry,
|
|||||||
rc = PTR_ERR(full_path);
|
rc = PTR_ERR(full_path);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!acl)
|
||||||
|
goto out;
|
||||||
|
|
||||||
/* return dos attributes as pseudo xattr */
|
/* return dos attributes as pseudo xattr */
|
||||||
/* return alt name if available as pseudo attr */
|
/* 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) {
|
switch (type) {
|
||||||
case ACL_TYPE_ACCESS:
|
case ACL_TYPE_ACCESS:
|
||||||
if (!acl)
|
|
||||||
goto out;
|
|
||||||
if (sb->s_flags & SB_POSIXACL)
|
if (sb->s_flags & SB_POSIXACL)
|
||||||
rc = cifs_do_set_acl(xid, pTcon, full_path, acl,
|
rc = cifs_do_set_acl(xid, pTcon, full_path, acl,
|
||||||
ACL_TYPE_ACCESS,
|
ACL_TYPE_ACCESS,
|
||||||
@ -1788,8 +1790,6 @@ int cifs_set_acl(struct user_namespace *mnt_userns, struct dentry *dentry,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ACL_TYPE_DEFAULT:
|
case ACL_TYPE_DEFAULT:
|
||||||
if (!acl)
|
|
||||||
goto out;
|
|
||||||
if (sb->s_flags & SB_POSIXACL)
|
if (sb->s_flags & SB_POSIXACL)
|
||||||
rc = cifs_do_set_acl(xid, pTcon, full_path, acl,
|
rc = cifs_do_set_acl(xid, pTcon, full_path, acl,
|
||||||
ACL_TYPE_DEFAULT,
|
ACL_TYPE_DEFAULT,
|
||||||
|
Loading…
Reference in New Issue
Block a user