public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2
@ 2026-01-22 17:04 Kery Qi
  2026-01-25 22:43 ` Jakub Kicinski
  2026-01-25 22:50 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 3+ messages in thread
From: Kery Qi @ 2026-01-22 17:04 UTC (permalink / raw)
  To: chandrashekar.devegowda, loic.poulain, ryazanov.s.a,
	andrew+netdev, davem, edumazet, kuba, pabeni
  Cc: chiranjeevi.rapolu, haijun.liu, ricardo.martinez, johannes,
	netdev, linux-kernel, Kery Qi

When receiving data in the DPMAIF RX path,
the t7xx_dpmaif_set_frag_to_skb() function adds
page fragments to an skb without checking if the number of
fragments has exceeded MAX_SKB_FRAGS. This could lead to a buffer overflow
in skb_shinfo(skb)->frags[] array, corrupting adjacent memory and
potentially causing kernel crashes or other undefined behavior.

This issue was identified through static code analysis by comparing with a
similar vulnerability fixed in the mt76 driver commit b102f0c522cf ("mt76:
fix array overflow on receiving too many fragments for a packet").

The vulnerability could be triggered if the modem firmware sends packets
with excessive fragments. While under normal protocol conditions (MTU 3080
bytes, BAT buffer 3584 bytes),
a single packet should not require additional
fragments, the kernel should not blindly trust firmware behavior.
Malicious, buggy, or compromised firmware could potentially craft packets
with more fragments than the kernel expects.

Fix this by adding a bounds check before calling skb_add_rx_frag() to
ensure nr_frags does not exceed MAX_SKB_FRAGS.

The check must be performed before unmapping to avoid a page leak
and double DMA unmap during device teardown.

Fixes: d642b012df70a ("net: wwan: t7xx: Add data path interface")
Signed-off-by: Kery Qi <qikeyu2017@gmail.com>
---
 drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c b/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
index b76bea6ab2d7..5af90ca6e063 100644
--- a/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
+++ b/drivers/net/wwan/t7xx/t7xx_hif_dpmaif_rx.c
@@ -395,6 +395,7 @@ static int t7xx_dpmaif_set_frag_to_skb(const struct dpmaif_rx_queue *rxq,
 				       struct sk_buff *skb)
 {
 	unsigned long long data_bus_addr, data_base_addr;
+	struct skb_shared_info *shinfo = skb_shinfo(skb);
 	struct device *dev = rxq->dpmaif_ctrl->dev;
 	struct dpmaif_bat_page *page_info;
 	unsigned int data_len;
@@ -402,18 +403,22 @@ static int t7xx_dpmaif_set_frag_to_skb(const struct dpmaif_rx_queue *rxq,
 
 	page_info = rxq->bat_frag->bat_skb;
 	page_info += t7xx_normal_pit_bid(pkt_info);
-	dma_unmap_page(dev, page_info->data_bus_addr, page_info->data_len, DMA_FROM_DEVICE);
 
 	if (!page_info->page)
 		return -EINVAL;
 
+	if (shinfo->nr_frags >= MAX_SKB_FRAGS)
+		return -EINVAL;
+
+	dma_unmap_page(dev, page_info->data_bus_addr, page_info->data_len, DMA_FROM_DEVICE);
+
 	data_bus_addr = le32_to_cpu(pkt_info->pd.data_addr_h);
 	data_bus_addr = (data_bus_addr << 32) + le32_to_cpu(pkt_info->pd.data_addr_l);
 	data_base_addr = page_info->data_bus_addr;
 	data_offset = data_bus_addr - data_base_addr;
 	data_offset += page_info->offset;
 	data_len = FIELD_GET(PD_PIT_DATA_LEN, le32_to_cpu(pkt_info->header));
-	skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page_info->page,
+	skb_add_rx_frag(skb, shinfo->nr_frags, page_info->page,
 			data_offset, data_len, page_info->data_len);
 
 	page_info->page = NULL;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2
  2026-01-22 17:04 [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2 Kery Qi
@ 2026-01-25 22:43 ` Jakub Kicinski
  2026-01-25 22:50 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: Jakub Kicinski @ 2026-01-25 22:43 UTC (permalink / raw)
  To: Kery Qi
  Cc: chandrashekar.devegowda, loic.poulain, ryazanov.s.a,
	andrew+netdev, davem, edumazet, pabeni, chiranjeevi.rapolu,
	haijun.liu, ricardo.martinez, johannes, netdev, linux-kernel

On Fri, 23 Jan 2026 01:04:01 +0800 Kery Qi wrote:
> ubject: [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2

Ugh, I think I got confused and send you the AI review for v1 again.
The correct subject tag is [PATCH net v2]
Don't put the v2 in the patch title, please.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2
  2026-01-22 17:04 [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2 Kery Qi
  2026-01-25 22:43 ` Jakub Kicinski
@ 2026-01-25 22:50 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-01-25 22:50 UTC (permalink / raw)
  To: Kery Qi
  Cc: chandrashekar.devegowda, loic.poulain, ryazanov.s.a,
	andrew+netdev, davem, edumazet, kuba, pabeni, chiranjeevi.rapolu,
	haijun.liu, ricardo.martinez, johannes, netdev, linux-kernel

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Fri, 23 Jan 2026 01:04:01 +0800 you wrote:
> When receiving data in the DPMAIF RX path,
> the t7xx_dpmaif_set_frag_to_skb() function adds
> page fragments to an skb without checking if the number of
> fragments has exceeded MAX_SKB_FRAGS. This could lead to a buffer overflow
> in skb_shinfo(skb)->frags[] array, corrupting adjacent memory and
> potentially causing kernel crashes or other undefined behavior.
> 
> [...]

Here is the summary with links:
  - net: wwan: t7xx: fix potential skb->frags overflow in RX path v2
    https://git.kernel.org/netdev/net/c/f0813bcd2d9d

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-01-25 22:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-22 17:04 [PATCH] net: wwan: t7xx: fix potential skb->frags overflow in RX path v2 Kery Qi
2026-01-25 22:43 ` Jakub Kicinski
2026-01-25 22:50 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox