]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: replace one-element arrays with flexible-array members
authorGustavo A. R. Silva <gustavoars@kernel.org>
Mon, 18 Dec 2023 15:33:24 +0000 (00:33 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Dec 2023 09:41:53 +0000 (10:41 +0100)
[ Upstream commit d272e01fa0a2f15c5c331a37cd99c6875c7b7186 ]

One-element arrays are deprecated, and we are replacing them with flexible
array members instead. So, replace one-element arrays with flexible-array
members in multiple structs in fs/ksmbd/smb_common.h and one in
fs/ksmbd/smb2pdu.h.

Important to mention is that doing a build before/after this patch results
in no binary output differences.

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines
on memcpy() and help us make progress towards globally enabling
-fstrict-flex-arrays=3 [1].

Link: https://github.com/KSPP/linux/issues/242
Link: https://github.com/KSPP/linux/issues/79
Link: https://gcc.gnu.org/pipermail/gcc-patches/2022-October/602902.html
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/Y3OxronfaPYv9qGP@work
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ksmbd/smb2pdu.c
fs/ksmbd/smb2pdu.h
fs/ksmbd/smb_common.h

index 0c261209233cdfa1739d72c311f86a10aec2e0cc..8c30fd05f7856498017e73d71add3e83a85e2584 100644 (file)
@@ -3486,7 +3486,7 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
                goto free_conv_name;
        }
 
-       struct_sz = readdir_info_level_struct_sz(info_level) - 1 + conv_len;
+       struct_sz = readdir_info_level_struct_sz(info_level) + conv_len;
        next_entry_offset = ALIGN(struct_sz, KSMBD_DIR_INFO_ALIGNMENT);
        d_info->last_entry_off_align = next_entry_offset - struct_sz;
 
@@ -3737,7 +3737,7 @@ static int reserve_populate_dentry(struct ksmbd_dir_info *d_info,
                return -EOPNOTSUPP;
 
        conv_len = (d_info->name_len + 1) * 2;
-       next_entry_offset = ALIGN(struct_sz - 1 + conv_len,
+       next_entry_offset = ALIGN(struct_sz + conv_len,
                                  KSMBD_DIR_INFO_ALIGNMENT);
 
        if (next_entry_offset > d_info->out_buf_len) {
index e20d4d707f1bd1cb1ebfabc88bf18117437534c7..77d226fee060421a98bd2a4878a4255004390ca6 100644 (file)
@@ -1621,7 +1621,7 @@ struct smb2_posix_info {
        /* SidBuffer contain two sids (UNIX user sid(16), UNIX group sid(16)) */
        u8 SidBuffer[32];
        __le32 name_len;
-       u8 name[1];
+       u8 name[];
        /*
         * var sized owner SID
         * var sized group SID
index ceb3cacaef1b8cc38295bd5e1d5ce981ace8e4d6..1ea1f746fa423f2e028ea9d5af865335d23a747c 100644 (file)
@@ -310,14 +310,14 @@ struct file_directory_info {
        __le64 AllocationSize;
        __le32 ExtFileAttributes;
        __le32 FileNameLength;
-       char FileName[1];
+       char FileName[];
 } __packed;   /* level 0x101 FF resp data */
 
 struct file_names_info {
        __le32 NextEntryOffset;
        __u32 FileIndex;
        __le32 FileNameLength;
-       char FileName[1];
+       char FileName[];
 } __packed;   /* level 0xc FF resp data */
 
 struct file_full_directory_info {
@@ -332,7 +332,7 @@ struct file_full_directory_info {
        __le32 ExtFileAttributes;
        __le32 FileNameLength;
        __le32 EaSize;
-       char FileName[1];
+       char FileName[];
 } __packed; /* level 0x102 FF resp */
 
 struct file_both_directory_info {
@@ -350,7 +350,7 @@ struct file_both_directory_info {
        __u8   ShortNameLength;
        __u8   Reserved;
        __u8   ShortName[24];
-       char FileName[1];
+       char FileName[];
 } __packed; /* level 0x104 FFrsp data */
 
 struct file_id_both_directory_info {
@@ -370,7 +370,7 @@ struct file_id_both_directory_info {
        __u8   ShortName[24];
        __le16 Reserved2;
        __le64 UniqueId;
-       char FileName[1];
+       char FileName[];
 } __packed;
 
 struct file_id_full_dir_info {
@@ -387,7 +387,7 @@ struct file_id_full_dir_info {
        __le32 EaSize; /* EA size */
        __le32 Reserved;
        __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/
-       char FileName[1];
+       char FileName[];
 } __packed; /* level 0x105 FF rsp data */
 
 struct smb_version_values {