]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb: client: refactor ACL setting control flow in id_mode_to_cifs_acl()
authorRalph Boehme <slow@samba.org>
Sat, 20 Jun 2026 07:06:58 +0000 (09:06 +0200)
committerSteve French <stfrench@microsoft.com>
Sat, 20 Jun 2026 15:15:40 +0000 (10:15 -0500)
Refactor the control flow in id_mode_to_cifs_acl() to reduce nesting and
prevent error code overwriting.

Instead of wrapping the call to ops->set_acl() in a conditional block,
introduce early exits (goto id_mode_to_cifs_acl_exit) when build_sec_desc()
fails or ops->set_acl is NULL. This ensures that any actual error returned
by build_sec_desc() is not overwritten with -EOPNOTSUPP.

Signed-off-by: Ralph Boehme <slow@samba.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cifsacl.c

index 42a3115359dac5faedfc8ea8327d372fbb250662..5bbf737363581cc04cf5cdd6140f1b1fa46cba59 100644 (file)
@@ -1834,14 +1834,18 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 *pnmode,
 
        cifs_dbg(NOISY, "build_sec_desc rc: %d\n", rc);
 
-       if (ops->set_acl == NULL)
-               rc = -EOPNOTSUPP;
+       if (rc != 0)
+               goto id_mode_to_cifs_acl_exit;
 
-       if (!rc) {
-               /* Set the security descriptor */
-               rc = ops->set_acl(pnntsd, nsecdesclen, inode, path, aclflag);
-               cifs_dbg(NOISY, "set_cifs_acl rc: %d\n", rc);
+       if (ops->set_acl == NULL) {
+               rc = -EOPNOTSUPP;
+               goto id_mode_to_cifs_acl_exit;
        }
+
+       /* Set the security descriptor */
+       rc = ops->set_acl(pnntsd, nsecdesclen, inode, path, aclflag);
+       cifs_dbg(NOISY, "set_cifs_acl rc: %d\n", rc);
+
 id_mode_to_cifs_acl_exit:
        cifs_put_tlink(tlink);