s3: VFS: fake_acls: Fix Coverity CID 1435850 Uninitialized pointer read.
authorJeremy Allison <jra@samba.org>
Fri, 9 Nov 2018 22:13:47 +0000 (14:13 -0800)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 15 Nov 2018 15:30:17 +0000 (16:30 +0100)
map_acl_perms_to_permset() can return an error, check it.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/modules/vfs_fake_acls.c

index 616f332e34213682772c6466103e9370c20b4afe..ba94c8db06f554847bcf0bd6cf7e911c1c84bb15 100644 (file)
@@ -568,7 +568,10 @@ static int fake_acl_process_chmod(SMB_ACL_T *pp_the_acl,
                }
                switch (tagtype) {
                        case SMB_ACL_USER_OBJ:
-                               map_acl_perms_to_permset(umode, &permset);
+                               ret = map_acl_perms_to_permset(umode, &permset);
+                               if (ret == -1) {
+                                       return -1;
+                               }
                                break;
                        case SMB_ACL_USER:
                                puid = (uid_t *)sys_acl_get_qualifier(entry);
@@ -578,18 +581,27 @@ static int fake_acl_process_chmod(SMB_ACL_T *pp_the_acl,
                                if (owner != *puid) {
                                        break;
                                }
-                               map_acl_perms_to_permset(umode, &permset);
+                               ret = map_acl_perms_to_permset(umode, &permset);
+                               if (ret == -1) {
+                                       return -1;
+                               }
                                break;
                        case SMB_ACL_GROUP_OBJ:
                        case SMB_ACL_GROUP:
                                /* Ignore all group entries. */
                                break;
                        case SMB_ACL_MASK:
-                               map_acl_perms_to_permset(mmode, &permset);
+                               ret = map_acl_perms_to_permset(mmode, &permset);
+                               if (ret == -1) {
+                                       return -1;
+                               }
                                got_mask = true;
                                break;
                        case SMB_ACL_OTHER:
-                               map_acl_perms_to_permset(omode, &permset);
+                               ret = map_acl_perms_to_permset(omode, &permset);
+                               if (ret == -1) {
+                                       return -1;
+                               }
                                break;
                        default:
                                errno = EINVAL;
@@ -614,7 +626,10 @@ static int fake_acl_process_chmod(SMB_ACL_T *pp_the_acl,
                if (ret == -1) {
                        return -1;
                }
-               map_acl_perms_to_permset(mmode, &mask_permset);
+               ret = map_acl_perms_to_permset(mmode, &mask_permset);
+               if (ret == -1) {
+                       return -1;
+               }
                ret = sys_acl_set_permset(mask_entry, mask_permset);
                if (ret == -1) {
                        return -1;