net: ethernet: mtk_eth_soc: Avoid truncating allocation
Subsystems (4)
PATCH 1/1 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;
| ^~
--- drivers/net/ethernet/mediatek/mtk_ppe.c | 3 +-- drivers/net/ethernet/mediatek/mtk_ppe.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-)
drivers/net/ethernet/mediatek/mtk_ppe.c +1 -2
@@ -615,8 +615,7 @@ mtk_foe_entry_commit_subflow(struct mtk_ppe *ppe, struct mtk_flow_entry *entry,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 ;
drivers/net/ethernet/mediatek/mtk_ppe.h +0 -1
@@ -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;
Signature · 1 line
2.34.1
Quoted 11 lines · Kees Cook
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;
| ^~
...
Quoted 5 lines
Signed-off-by Kees Cook <[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(-)
This patch was applied to netdev/net.git (master) by Paolo Abeni <[email protected]>:
Hello:
This patch was applied to netdev/net.git (master)
by Paolo Abeni <[email protected]>:
Quoted 6 lines · On Fri, 27 Jan 2023 14:38:54 -0800 you wrote:
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:
Quoted 6 lines
../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;
| ^~[...]
Here is the summary with links:
- net: ethernet: mtk_eth_soc: Avoid truncating allocation
https://git.kernel.org/netdev/net/c/f3eceaed9edd
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html