smb3: check xattr value length earlier
authorSteve French <stfrench@microsoft.com>
Tue, 12 Jul 2022 16:43:44 +0000 (11:43 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Aug 2022 09:40:45 +0000 (11:40 +0200)
[ Upstream commit 5fa2cffba0b82336a2244d941322eb1627ff787b ]

Coverity complains about assigning a pointer based on
value length before checking that value length goes
beyond the end of the SMB.  Although this is even more
unlikely as value length is a single byte, and the
pointer is not dereferenced until laterm, it is clearer
to check the lengths first.

Addresses-Coverity: 1467704 ("Speculative execution data leak")
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/cifs/smb2ops.c

index 735aafe..07895e9 100644 (file)
@@ -1105,9 +1105,7 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,
        size_t name_len, value_len, user_name_len;
 
        while (src_size > 0) {
-               name = &src->ea_data[0];
                name_len = (size_t)src->ea_name_length;
-               value = &src->ea_data[src->ea_name_length + 1];
                value_len = (size_t)le16_to_cpu(src->ea_value_length);
 
                if (name_len == 0)
@@ -1119,6 +1117,9 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,
                        goto out;
                }
 
+               name = &src->ea_data[0];
+               value = &src->ea_data[src->ea_name_length + 1];
+
                if (ea_name) {
                        if (ea_name_len == name_len &&
                            memcmp(ea_name, name, name_len) == 0) {