[syzbot] [net?] WARNING in ipgre_xmit (2)

1 view
Skip to first unread message

syzbot

unread,
2:48 PM (7 hours ago) 2:48 PM
to da...@davemloft.net, dsa...@kernel.org, edum...@google.com, ho...@kernel.org, ido...@nvidia.com, ku...@kernel.org, linux-...@vger.kernel.org, net...@vger.kernel.org, pab...@redhat.com, syzkall...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: fc02acf6ac0c Merge tag 'platform-drivers-x86-v7.2-4' of gi..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=1314d632580000
kernel config: https://syzkaller.appspot.com/x/.config?x=c05be6c9b0d36cb9
dashboard link: https://syzkaller.appspot.com/bug?extid=f16c1b285c9f63994eec
compiler: Debian clang version 22.1.8 (++20260613092233+e80beda6e255-1~exp1~20260613092250.77), Debian LLD 22.1.8

Unfortunately, I don't have any reproducer for this issue yet.

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/d900f083ada3/non_bootable_disk-fc02acf6.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/a67a14a03b39/vmlinux-fc02acf6.xz
kernel image: https://storage.googleapis.com/syzbot-assets/328affe48b77/bzImage-fc02acf6.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+f16c1b...@syzkaller.appspotmail.com

------------[ cut here ]------------
len > ((int)(~0U >> 1))
WARNING: ./include/linux/skbuff.h:2864 at pskb_may_pull_reason include/linux/skbuff.h:2864 [inline], CPU#0: syz.0.0/5325
WARNING: ./include/linux/skbuff.h:2864 at pskb_network_may_pull_reason include/linux/skbuff.h:3265 [inline], CPU#0: syz.0.0/5325
WARNING: ./include/linux/skbuff.h:2864 at pskb_inet_may_pull_reason include/net/ip_tunnels.h:481 [inline], CPU#0: syz.0.0/5325
WARNING: ./include/linux/skbuff.h:2864 at pskb_inet_may_pull include/net/ip_tunnels.h:486 [inline], CPU#0: syz.0.0/5325
WARNING: ./include/linux/skbuff.h:2864 at ipgre_xmit+0x958/0xcd0 net/ipv4/ip_gre.c:658, CPU#0: syz.0.0/5325
Modules linked in:
CPU: 0 UID: 0 PID: 5325 Comm: syz.0.0 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:pskb_may_pull_reason include/linux/skbuff.h:2864 [inline]
RIP: 0010:pskb_network_may_pull_reason include/linux/skbuff.h:3265 [inline]
RIP: 0010:pskb_inet_may_pull_reason include/net/ip_tunnels.h:481 [inline]
RIP: 0010:pskb_inet_may_pull include/net/ip_tunnels.h:486 [inline]
RIP: 0010:ipgre_xmit+0x958/0xcd0 net/ipv4/ip_gre.c:658
Code: 48 3b 84 24 80 00 00 00 0f 85 3b 01 00 00 31 c0 48 8d 65 d8 5b 41 5c 41 5d 41 5e 41 5f 5d e9 3f e9 77 01 cc e8 e9 05 69 f7 90 <0f> 0b 90 e9 08 f8 ff ff 44 89 ff 44 89 e6 e8 95 07 69 f7 45 39 e7
RSP: 0018:ffffc9000e4cf600 EFLAGS: 00010283
RAX: ffffffff8a5e0e67 RBX: 0000000000000000 RCX: 0000000000100000
RDX: ffffc9000eef2000 RSI: 00000000000000bb RDI: 00000000000000bc
RBP: ffffc9000e4cf6d0 R08: ffff888035d20000 R09: 0000000000000002
R10: 0000000000004888 R11: ffffffff8a5e0510 R12: ffff88801244e000
R13: dffffc0000000000 R14: ffff888043f173c0 R15: 00000000ffffff40
FS: 00007f99c17006c0(0000) GS:ffff88808c543000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f99c0a12a18 CR3: 0000000042b19000 CR4: 0000000000352ef0
Call Trace:
<TASK>
__netdev_start_xmit include/linux/netdevice.h:5400 [inline]
netdev_start_xmit include/linux/netdevice.h:5409 [inline]
__dev_direct_xmit+0x4b6/0x730 net/core/dev.c:4942
__xsk_generic_xmit net/xdp/xsk.c:1079 [inline]
xsk_generic_xmit+0x277a/0x40a0 net/xdp/xsk.c:1120
__xsk_sendmsg net/xdp/xsk.c:1174 [inline]
xsk_sendmsg+0x482/0x810 net/xdp/xsk.c:1184
sock_sendmsg_nosec+0x13a/0x180 net/socket.c:775
__sock_sendmsg net/socket.c:790 [inline]
____sys_sendmsg+0x54e/0x850 net/socket.c:2684
___sys_sendmsg+0x2a5/0x360 net/socket.c:2738
__sys_sendmsg net/socket.c:2770 [inline]
__do_sys_sendmsg net/socket.c:2775 [inline]
__se_sys_sendmsg net/socket.c:2773 [inline]
__x64_sys_sendmsg+0x1b1/0x290 net/socket.c:2773
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f99c079de99
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f99c16fffe8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007f99c0a25fa0 RCX: 00007f99c079de99
RDX: 0000000000000040 RSI: 0000200000000700 RDI: 0000000000000006
RBP: 00007f99c0833eaf R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007f99c0a26038 R14: 00007f99c0a25fa0 R15: 00007ffdd0e42b38
</TASK>


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzk...@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup

Jason Xing

unread,
8:54 PM (1 hour ago) 8:54 PM
to syzbot, da...@davemloft.net, dsa...@kernel.org, edum...@google.com, ho...@kernel.org, ido...@nvidia.com, ku...@kernel.org, linux-...@vger.kernel.org, net...@vger.kernel.org, pab...@redhat.com, syzkall...@googlegroups.com
Ipgre is not the only one which is affected in this case. Essentially
all the affected xxx_xmit() calls pskb_inet_may_pull() that gets a
negative value when using skb_network_offset(). The result in this
case should be zero.

The commit 3914d88f7608 ("xsk: Respect device's headroom and tailroom
on generic xmit path") introduces skb_reserve() which makes 'skb->data
+= len;' and then result in the inconsistency in skb_network_offset().

The plan is to reset the header after skb_reserve:
diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
index XXXXXXX..XXXXXXX 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -1025,6 +1025,7 @@ static struct sk_buff
*xsk_build_skb_zerocopy(struct xdp_sock *xs,
return ERR_PTR(err);

skb_reserve(skb, hr);
+ skb_reset_network_header(skb);
if (desc->options & XDP_TX_METADATA) {
err = xsk_skb_metadata(skb, buffer, desc, pool, hr);
if (unlikely(err)) {
@@ -1110,6 +1111,7 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,

skb_reserve(skb, hr);
skb_put(skb, len);
+ skb_reset_network_header(skb);

err = skb_store_bits(skb, 0, buffer, len);
if (unlikely(err))
--
2.39.5

As syzbot said, I cannot have a reproducer to test/verify it.

Thanks,
Jason
Reply all
Reply to author
Forward
0 new messages