cifs: If a corrupted DACL is returned by the server, bail out.
authorShyam Prasad N <sprasad@microsoft.com>
Wed, 24 Feb 2021 15:04:02 +0000 (15:04 +0000)
committerSteve French <stfrench@microsoft.com>
Wed, 24 Feb 2021 17:41:43 +0000 (11:41 -0600)
Static code analysis reported a possible null pointer dereference
in my last commit:
cifs: Retain old ACEs when converting between mode bits and ACL.

This could happen if the DACL returned by the server is corrupted.
We were trying to continue by assuming that the file has empty DACL.
We should bail out with an error instead.

Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reported-by: Colin Ian King <colin.king@canonical.com>
Reviewed-by: Rohith Surabattula <rohiths@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsacl.c

index 0806ae784061571ebe143b0e65292d878720beb4..9d29eb9660c28141058cb48b7761ec0e916e1ac2 100644 (file)
@@ -1275,8 +1275,8 @@ static int build_sec_desc(struct cifs_ntsd *pntsd, struct cifs_ntsd *pnntsd,
        if (dacloffset) {
                dacl_ptr = (struct cifs_acl *)((char *)pntsd + dacloffset);
                if (end_of_acl < (char *)dacl_ptr + le16_to_cpu(dacl_ptr->size)) {
-                       cifs_dbg(VFS, "Existing ACL size is wrong. Discarding old ACL\n");
-                       dacl_ptr = NULL;
+                       cifs_dbg(VFS, "Server returned illegal ACL size\n");
+                       return -EINVAL;
                }
        }