Commit 47c66248 authored by Kees Cook's avatar Kees Cook
Browse files

treewide: Replace 0-element memcpy() destinations with flexible arrays



The 0-element arrays that are used as memcpy() destinations are actually
flexible arrays. Adjust their structures accordingly so that memcpy()
can better reason able their destination size (i.e. they need to be seen
as "unknown" length rather than "zero").

In some cases, use of the DECLARE_FLEX_ARRAY() helper is needed when a
flexible array is alone in a struct.

Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Nilesh Javali <njavali@marvell.com>
Cc: Manish Rangankar <mrangankar@marvell.com>
Cc: GR-QLogic-Storage-Upstream@marvell.com
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Phillip Potter <phil@philpotter.co.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Cc: Fabio Aiuto <fabioaiuto83@gmail.com>
Cc: Ross Schmidt <ross.schm.dev@gmail.com>
Cc: Marco Cesati <marcocesati@gmail.com>
Cc: ath10k@lists.infradead.org
Cc: linux-wireless@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: linux-scsi@vger.kernel.org
Cc: linux-staging@lists.linux.dev
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent fa7845cf
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ struct bmi_cmd {
		struct {
			__le32 addr;
			__le32 len;
			u8 payload[0];
			u8 payload[];
		} write_mem;
		struct {
			__le32 addr;
@@ -138,18 +138,18 @@ struct bmi_cmd {
		} rompatch_uninstall;
		struct {
			__le32 count;
			__le32 patch_ids[0]; /* length of @count */
			__le32 patch_ids[]; /* length of @count */
		} rompatch_activate;
		struct {
			__le32 count;
			__le32 patch_ids[0]; /* length of @count */
			__le32 patch_ids[]; /* length of @count */
		} rompatch_deactivate;
		struct {
			__le32 addr;
		} lz_start;
		struct {
			__le32 len; /* max BMI_MAX_DATA_SIZE */
			u8 payload[0]; /* length of @len */
			u8 payload[]; /* length of @len */
		} lz_data;
		struct {
			u8 name[BMI_NVRAM_SEG_NAME_SZ];
@@ -160,7 +160,7 @@ struct bmi_cmd {

union bmi_resp {
	struct {
		u8 payload[0];
		DECLARE_FLEX_ARRAY(u8, payload);
	} read_mem;
	struct {
		__le32 result;
+2 −2
Original line number Diff line number Diff line
@@ -366,13 +366,13 @@ struct qla4_work_evt {
		struct {
			enum iscsi_host_event_code code;
			uint32_t data_size;
			uint8_t data[0];
			uint8_t data[];
		} aen;
		struct {
			uint32_t status;
			uint32_t pid;
			uint32_t data_size;
			uint8_t data[0];
			uint8_t data[];
		} ping;
	} u;
};
+3 −3
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ struct ieee_param {
		struct {
			u32 len;
			u8 reserved[32];
			u8 data[0];
			u8 data[];
		} wpa_ie;
		struct {
			int command;
@@ -198,7 +198,7 @@ struct ieee_param {
			u8 idx;
			u8 seq[8]; /* sequence counter (set: RX, get: TX) */
			u16 key_len;
			u8 key[0];
			u8 key[];
		} crypt;
#ifdef CONFIG_88EU_AP_MODE
		struct {
@@ -210,7 +210,7 @@ struct ieee_param {
		} add_sta;
		struct {
			u8	reserved[2];/* for set max_num_sta */
			u8	buf[0];
			u8	buf[];
		} bcn_ie;
#endif

+2 −2
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ struct ieee_param {
		struct {
			u32 len;
			u8 reserved[32];
			u8 data[0];
			u8 data[];
		} wpa_ie;
		struct {
			int command;
@@ -91,7 +91,7 @@ struct ieee_param {
			u8 idx;
			u8 seq[8]; /* sequence counter (set: RX, get: TX) */
			u16 key_len;
			u8 key[0];
			u8 key[];
		} crypt;
	} u;
};
+3 −3
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ struct ieee_param {
		struct {
			u32 len;
			u8 reserved[32];
			u8 data[0];
			u8 data[];
		} wpa_ie;
	        struct{
			int command;
@@ -185,7 +185,7 @@ struct ieee_param {
			u8 idx;
			u8 seq[8]; /* sequence counter (set: RX, get: TX) */
			u16 key_len;
			u8 key[0];
			u8 key[];
		} crypt;
		struct {
			u16 aid;
@@ -196,7 +196,7 @@ struct ieee_param {
		} add_sta;
		struct {
			u8 reserved[2];/* for set max_num_sta */
			u8 buf[0];
			u8 buf[];
		} bcn_ie;
	} u;
};
Loading