net: wwan: iosm: Convert single instance struct member to flexible array
Subsystems (4)
PATCH 1/1 net: wwan: iosm: Convert single instance struct member to flexible array
struct mux_adth actually ends with multiple struct mux_adth_dg members. This is seen both in the comments about the member:
/**
* struct mux_adth - Structure of the Aggregated Datagram Table Header.
...
* @dg: datagramm table with variable length
*/
and in the preparation for populating it:
adth_dg_size = offsetof(struct mux_adth, dg) +
ul_adb->dg_count[i] * sizeof(*dg);
...
adth_dg_size -= offsetof(struct mux_adth, dg);
memcpy(&adth->dg, ul_adb->dg[i], adth_dg_size);This was reported as a run-time false positive warning:
memcpy: detected field-spanning write (size 16) of single field "&adth->dg" at drivers/net/wwan/iosm/iosm_ipc_mux_codec.c:852 (size 8)
Adjust the struct mux_adth definition and associated sizeof() math; no binary output differences are observed in the resulting object file.
--- drivers/net/wwan/iosm/iosm_ipc_mux_codec.c | 15 ++++++--------- drivers/net/wwan/iosm/iosm_ipc_mux_codec.h | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-)
drivers/net/wwan/iosm/iosm_ipc_mux_codec.c +6 -9
@@ -626,14 +626,12 @@ static void mux_dl_adb_decode(struct iosm_mux *ipc_mux,if (adth->signature !=cpu_to_le32 (IOSM_AGGR_MUX_SIG_ADTH )) goto adb_decode_err; -if (le16_to_cpu (adth->table_length) < (sizeof (struct mux_adth ) - -sizeof (struct mux_adth_dg ))) +if (le16_to_cpu (adth->table_length) <sizeof (struct mux_adth )) goto adb_decode_err;/* Calculate the number of datagrams. */ nr_of_dg = (le16_to_cpu (adth->table_length) - -sizeof (struct mux_adth ) + -sizeof (struct mux_adth_dg )) / +sizeof (struct mux_adth )) /sizeof (struct mux_adth_dg );/* Is the datagram table empty ? */
@@ -649,7 +647,7 @@ static void mux_dl_adb_decode(struct iosm_mux *ipc_mux, }/* New aggregated datagram table. */ - dg = &adth->dg; + dg = adth->dg;if (mux_dl_process_dg (ipc_mux, adbh, dg, skb, if_id, nr_of_dg) <0 ) goto adb_decode_err;
@@ -849,7 +847,7 @@ static void ipc_mux_ul_encode_adth(struct iosm_mux *ipc_mux, adth->if_id = i; adth->table_length =cpu_to_le16 (adth_dg_size); adth_dg_size -= offsetof(struct mux_adth , dg); -memcpy (&adth->dg, ul_adb->dg[i], adth_dg_size); +memcpy (adth->dg, ul_adb->dg[i], adth_dg_size); ul_adb->if_cnt++; }
@@ -1426,14 +1424,13 @@ static int ipc_mux_get_payload_from_adb(struct iosm_mux *ipc_mux,if (adth->signature ==cpu_to_le32 (IOSM_AGGR_MUX_SIG_ADTH )) { nr_of_dg = (le16_to_cpu (adth->table_length) - -sizeof (struct mux_adth ) + -sizeof (struct mux_adth_dg )) / +sizeof (struct mux_adth )) /sizeof (struct mux_adth_dg );if (nr_of_dg <=0 )return payload_size; - dg = &adth->dg; + dg = adth->dg;for (i =0 ; i < nr_of_dg; i++, dg++) { if (le32_to_cpu(dg->datagram_index) <
drivers/net/wwan/iosm/iosm_ipc_mux_codec.h +1 -1
@@ -161,7 +161,7 @@ struct mux_adth {u8 opt_ipv4v6;__le32 next_table_index;__le32 reserved2; -struct mux_adth_dg dg; +struct mux_adth_dg dg[]; };/**
Signature · 1 line
2.34.1
Quoted 24 lines · Kees Cook
struct
mux_adthactually ends with multiple structmux_adth_dgmembers. This is seen both in the comments about the member:/**
* structmux_adth- Structure of the Aggregated Datagram Table Header.
...
* @dg: datagramm table with variable length
*/and in the preparation for populating it:
adth_dg_size = offsetof(struct mux_adth, dg) + ul_adb->dg_count[i] * sizeof(*dg); ... adth_dg_size -= offsetof(struct mux_adth, dg); memcpy(&adth->dg, ul_adb->dg[i], adth_dg_size);This was reported as a run-time false positive warning:
memcpy: detected field-spanning write (size 16) of single field "
&adth->dg" atdrivers/net/wwan/iosm/iosm_ipc_mux_codec.c:852(size 8)Adjust the struct
mux_adthdefinition and associatedsizeof()math; no binary output differences are observed in the resulting object file.
Quoted 16 lines
Reported-by Florian Klink <[email protected]>Fixes 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")Cc M Chetan Kumar <[email protected]>Cc Bagas Sanjaya <[email protected]>Cc Intel Corporation <[email protected]>Cc Loic Poulain <[email protected]>Cc Sergey Ryazanov <[email protected]>Cc Johannes Berg <[email protected]>Cc "David S. Miller" <[email protected]>Cc Eric Dumazet <[email protected]>Cc Jakub Kicinski <[email protected]>Cc Paolo Abeni <[email protected]>Cc "Gustavo A. R. Silva" <[email protected]>Signed-off-by Kees Cook <[email protected]>
Thank god they used offsetof(struct mux_adth, dg) everywhere. :P
--
Gustavo
Quoted 77 lines
--- drivers/net/wwan/iosm/iosm_ipc_mux_codec.c | 15 ++++++--------- drivers/net/wwan/iosm/iosm_ipc_mux_codec.h | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-)drivers/net/wwan/iosm/iosm_ipc_mux_codec.c +6
-9@@ -626,14 +626,12 @@ static void mux_dl_adb_decode(struct iosm_mux *ipc_mux,if (adth->signature !=cpu_to_le32 (IOSM_AGGR_MUX_SIG_ADTH )) goto adb_decode_err; -if (le16_to_cpu (adth->table_length) < (sizeof (struct mux_adth ) - -sizeof (struct mux_adth_dg ))) +if (le16_to_cpu (adth->table_length) <sizeof (struct mux_adth )) goto adb_decode_err;/* Calculate the number of datagrams. */ nr_of_dg = (le16_to_cpu (adth->table_length) - -sizeof (struct mux_adth ) + -sizeof (struct mux_adth_dg )) / +sizeof (struct mux_adth )) /sizeof (struct mux_adth_dg );/* Is the datagram table empty ? */ @@ -649,7 +647,7 @@ static void mux_dl_adb_decode(struct iosm_mux *ipc_mux, }/* New aggregated datagram table. */ - dg = &adth->dg; + dg = adth->dg;if (mux_dl_process_dg (ipc_mux, adbh, dg, skb, if_id, nr_of_dg) <0 ) goto adb_decode_err;@@ -849,7 +847,7 @@ static void ipc_mux_ul_encode_adth(struct iosm_mux *ipc_mux, adth->if_id = i; adth->table_length =cpu_to_le16 (adth_dg_size); adth_dg_size -= offsetof(struct mux_adth , dg); -memcpy (&adth->dg, ul_adb->dg[i], adth_dg_size); +memcpy (adth->dg, ul_adb->dg[i], adth_dg_size); ul_adb->if_cnt++; }@@ -1426,14 +1424,13 @@ static int ipc_mux_get_payload_from_adb(struct iosm_mux *ipc_mux,if (adth->signature ==cpu_to_le32 (IOSM_AGGR_MUX_SIG_ADTH )) { nr_of_dg = (le16_to_cpu (adth->table_length) - -sizeof (struct mux_adth ) + -sizeof (struct mux_adth_dg )) / +sizeof (struct mux_adth )) /sizeof (struct mux_adth_dg );if (nr_of_dg <=0 )return payload_size; - dg = &adth->dg; + dg = adth->dg;for (i =0 ; i < nr_of_dg; i++, dg++) { if (le32_to_cpu(dg->datagram_index) <drivers/net/wwan/iosm/iosm_ipc_mux_codec.h +1
-1@@ -161,7 +161,7 @@ struct mux_adth {u8 opt_ipv4v6;__le32 next_table_index;__le32 reserved2; -struct mux_adth_dg dg; +struct mux_adth_dg dg[]; };/** Signature · 1 line
2.34.1
Quoted 40 lines · Kees Cook
struct
mux_adthactually ends with multiple structmux_adth_dgmembers. This is seen both in the comments about the member:/**
* structmux_adth- Structure of the Aggregated Datagram Table Header.
...
* @dg: datagramm table with variable length
*/and in the preparation for populating it:
adth_dg_size = offsetof(struct mux_adth, dg) + ul_adb->dg_count[i] * sizeof(*dg); ... adth_dg_size -= offsetof(struct mux_adth, dg); memcpy(&adth->dg, ul_adb->dg[i], adth_dg_size);This was reported as a run-time false positive warning:
memcpy: detected field-spanning write (size 16) of single field "
&adth->dg" atdrivers/net/wwan/iosm/iosm_ipc_mux_codec.c:852(size 8)Adjust the struct
mux_adthdefinition and associatedsizeof()math; no binary output differences are observed in the resulting object file.Reported-by Florian Klink <[email protected]>Fixes 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")Cc M Chetan Kumar <[email protected]>Cc Bagas Sanjaya <[email protected]>Cc Intel Corporation <[email protected]>Cc Loic Poulain <[email protected]>Cc Sergey Ryazanov <[email protected]>Cc Johannes Berg <[email protected]>Cc "David S. Miller" <[email protected]>Cc Eric Dumazet <[email protected]>Cc Jakub Kicinski <[email protected]>Cc Paolo Abeni <[email protected]>Cc "Gustavo A. R. Silva" <[email protected]>Signed-off-by Kees Cook <[email protected]>
Quoted 4 lines
--- drivers/net/wwan/iosm/iosm_ipc_mux_codec.c | 15 ++++++--------- drivers/net/wwan/iosm/iosm_ipc_mux_codec.h | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-)
This patch was applied to netdev/net.git (main) by Paolo Abeni <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Paolo Abeni <[email protected]>:
Quoted 10 lines · On Tue, 20 Jun 2023 12:42:38 -0700 you wrote:
struct
mux_adthactually ends with multiple structmux_adth_dgmembers. This is seen both in the comments about the member:/**
* structmux_adth- Structure of the Aggregated Datagram Table Header.
...
* @dg: datagramm table with variable length
*/[...]
Here is the summary with links:
- net: wwan: iosm: Convert single instance struct member to flexible array
https://git.kernel.org/netdev/net/c/dec24b3b3394
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html