Commit 30429388 authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Steve French
Browse files

ksmbd: replace one-element arrays with flexible-array members

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

 [1]
Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 7ecbe926
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3440,7 +3440,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;

@@ -3692,7 +3692,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) {
+1 −1
Original line number Diff line number Diff line
@@ -443,7 +443,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
+6 −6
Original line number Diff line number Diff line
@@ -277,14 +277,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 {
@@ -299,7 +299,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 {
@@ -317,7 +317,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 {
@@ -337,7 +337,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 {
@@ -354,7 +354,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 {