123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- From f3eceaed9edd7c0e0d9fb057613131f92973626f Mon Sep 17 00:00:00 2001
- From: Kees Cook <[email protected]>
- Date: Fri, 27 Jan 2023 14:38:54 -0800
- Subject: [PATCH] net: ethernet: mtk_eth_soc: Avoid truncating allocation
- There doesn't appear to be a reason to truncate the allocation used for
- flow_info, so do a full allocation and remove the unused empty struct.
- GCC does not like having a reference to an object that has been
- partially allocated, as bounds checking may become impossible when
- such an object is passed to other code. Seen with GCC 13:
- ../drivers/net/ethernet/mediatek/mtk_ppe.c: In function 'mtk_foe_entry_commit_subflow':
- ../drivers/net/ethernet/mediatek/mtk_ppe.c:623:18: warning: array subscript 'struct mtk_flow_entry[0]' is partly outside array bounds of 'unsigned char[48]' [-Warray-bounds=]
- 623 | flow_info->l2_data.base_flow = entry;
- | ^~
- Cc: Felix Fietkau <[email protected]>
- Cc: John Crispin <[email protected]>
- Cc: Sean Wang <[email protected]>
- Cc: Mark Lee <[email protected]>
- Cc: Lorenzo Bianconi <[email protected]>
- Cc: "David S. Miller" <[email protected]>
- Cc: Eric Dumazet <[email protected]>
- Cc: Jakub Kicinski <[email protected]>
- Cc: Paolo Abeni <[email protected]>
- Cc: Matthias Brugger <[email protected]>
- Cc: [email protected]
- Cc: [email protected]
- Cc: [email protected]
- Signed-off-by: Kees Cook <[email protected]>
- Reviewed-by: Simon Horman <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Paolo Abeni <[email protected]>
- ---
- drivers/net/ethernet/mediatek/mtk_ppe.c | 3 +--
- drivers/net/ethernet/mediatek/mtk_ppe.h | 1 -
- 2 files changed, 1 insertion(+), 3 deletions(-)
- --- a/drivers/net/ethernet/mediatek/mtk_ppe.c
- +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
- @@ -621,8 +621,7 @@ mtk_foe_entry_commit_subflow(struct mtk_
- u32 ib1_mask = mtk_get_ib1_pkt_type_mask(ppe->eth) | MTK_FOE_IB1_UDP;
- int type;
-
- - flow_info = kzalloc(offsetof(struct mtk_flow_entry, l2_data.end),
- - GFP_ATOMIC);
- + flow_info = kzalloc(sizeof(*flow_info), GFP_ATOMIC);
- if (!flow_info)
- return;
-
- --- a/drivers/net/ethernet/mediatek/mtk_ppe.h
- +++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
- @@ -279,7 +279,6 @@ struct mtk_flow_entry {
- struct {
- struct mtk_flow_entry *base_flow;
- struct hlist_node list;
- - struct {} end;
- } l2_data;
- };
- struct rhash_head node;
|