* [PATCH net] gtp: check skb_pull_data() return in gtp1u_send_echo_resp()
@ 2026-07-10 23:07 Xiang Mei (Microsoft)
2026-07-21 22:10 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Xiang Mei (Microsoft) @ 2026-07-10 23:07 UTC (permalink / raw)
To: Pablo Neira Ayuso, Harald Welte, Andrew Lunn, David S . Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: Wojciech Drewek, Tony Nguyen, osmocom-net-gprs, netdev,
linux-kernel, AutonomousCodeSecurity, tgopinath, kys,
Xiang Mei (Microsoft)
gtp1u_send_echo_resp() ignores skb_pull_data()'s return value. Its
caller gtp1u_udp_encap_recv() only guarantees 16 bytes (udphdr +
gtp1_header), but the pull requests 20 (gtp1_header_long + udphdr). For
a 16-19 byte echo request the pull fails and returns NULL without
advancing skb->data; execution continues, and the following skb_push()
plus the IP header pushed by iptunnel_xmit() move skb->data below
skb->head, tripping skb_under_panic().
Fix it by dropping the packet when skb_pull_data() fails.
skbuff: skb_under_panic: ...
kernel BUG at net/core/skbuff.c:214!
Call Trace:
skb_push (net/core/skbuff.c:2648)
iptunnel_xmit (net/ipv4/ip_tunnel_core.c:82)
gtp_encap_recv (drivers/net/gtp.c:701 drivers/net/gtp.c:808 drivers/net/gtp.c:920)
udp_queue_rcv_one_skb (net/ipv4/udp.c:2388)
...
Kernel panic - not syncing: Fatal exception in interrupt
Fixes: 9af41cc33471 ("gtp: Implement GTP echo response")
Reported-by: AutonomousCodeSecurity@microsoft.com
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Xiang Mei (Microsoft) <xmei5@asu.edu>
---
drivers/net/gtp.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index a60ef32b35b8..f8c7b532b10c 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -669,8 +669,9 @@ static int gtp1u_send_echo_resp(struct gtp_dev *gtp, struct sk_buff *skb)
return -1;
/* pull GTP and UDP headers */
- skb_pull_data(skb,
- sizeof(struct gtp1_header_long) + sizeof(struct udphdr));
+ if (!skb_pull_data(skb, sizeof(struct gtp1_header_long) +
+ sizeof(struct udphdr)))
+ return -1;
gtp_pkt = skb_push(skb, sizeof(struct gtp1u_packet));
memset(gtp_pkt, 0, sizeof(struct gtp1u_packet));
--
2.43.0
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH net] gtp: check skb_pull_data() return in gtp1u_send_echo_resp()
2026-07-10 23:07 [PATCH net] gtp: check skb_pull_data() return in gtp1u_send_echo_resp() Xiang Mei (Microsoft)
@ 2026-07-21 22:10 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-07-21 22:10 UTC (permalink / raw)
To: Xiang Mei
Cc: pablo, laforge, andrew+netdev, davem, edumazet, kuba, pabeni,
wojciech.drewek, anthony.l.nguyen, osmocom-net-gprs, netdev,
linux-kernel, AutonomousCodeSecurity, tgopinath, kys
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 10 Jul 2026 23:07:24 +0000 you wrote:
> gtp1u_send_echo_resp() ignores skb_pull_data()'s return value. Its
> caller gtp1u_udp_encap_recv() only guarantees 16 bytes (udphdr +
> gtp1_header), but the pull requests 20 (gtp1_header_long + udphdr). For
> a 16-19 byte echo request the pull fails and returns NULL without
> advancing skb->data; execution continues, and the following skb_push()
> plus the IP header pushed by iptunnel_xmit() move skb->data below
> skb->head, tripping skb_under_panic().
>
> [...]
Here is the summary with links:
- [net] gtp: check skb_pull_data() return in gtp1u_send_echo_resp()
https://git.kernel.org/netdev/net/c/cd170f051dba
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] 2+ messages in thread
end of thread, other threads:[~2026-07-21 22:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-10 23:07 [PATCH net] gtp: check skb_pull_data() return in gtp1u_send_echo_resp() Xiang Mei (Microsoft)
2026-07-21 22:10 ` 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
all inboxes | Powered by JetHome®