From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
netdev <netdev@vger.kernel.org>,
Willem de Bruijn <willemb@google.com>,
Eric Dumazet <edumazet@google.com>,
syzbot <syzkaller@googlegroups.com>,
Hangbin Liu <liuhangbin@gmail.com>
Subject: Re: [PATCH v2 net 3/3] net/af_packet: make sure to pull mac header
Date: Thu, 2 Jun 2022 15:49:49 -0400 [thread overview]
Message-ID: <20220602154941-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20220602161859.2546399-4-eric.dumazet@gmail.com>
On Thu, Jun 02, 2022 at 09:18:59AM -0700, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> GSO assumes skb->head contains link layer headers.
>
> tun device in some case can provide base 14 bytes,
> regardless of VLAN being used or not.
>
> After blamed commit, we can end up setting a network
> header offset of 18+, we better pull the missing
> bytes to avoid a posible crash in GSO.
>
> syzbot report was:
> kernel BUG at include/linux/skbuff.h:2699!
> invalid opcode: 0000 [#1] PREEMPT SMP KASAN
> CPU: 1 PID: 3601 Comm: syz-executor210 Not tainted 5.18.0-syzkaller-11338-g2c5ca23f7414 #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> RIP: 0010:__skb_pull include/linux/skbuff.h:2699 [inline]
> RIP: 0010:skb_mac_gso_segment+0x48f/0x530 net/core/gro.c:136
> Code: 00 48 c7 c7 00 96 d4 8a c6 05 cb d3 45 06 01 e8 26 bb d0 01 e9 2f fd ff ff 49 c7 c4 ea ff ff ff e9 f1 fe ff ff e8 91 84 19 fa <0f> 0b 48 89 df e8 97 44 66 fa e9 7f fd ff ff e8 ad 44 66 fa e9 48
> RSP: 0018:ffffc90002e2f4b8 EFLAGS: 00010293
> RAX: 0000000000000000 RBX: 0000000000000012 RCX: 0000000000000000
> RDX: ffff88805bb58000 RSI: ffffffff8760ed0f RDI: 0000000000000004
> RBP: 0000000000005dbc R08: 0000000000000004 R09: 0000000000000fe0
> R10: 0000000000000fe4 R11: 0000000000000000 R12: 0000000000000fe0
> R13: ffff88807194d780 R14: 1ffff920005c5e9b R15: 0000000000000012
> FS: 000055555730f300(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00000000200015c0 CR3: 0000000071ff8000 CR4: 0000000000350ee0
> Call Trace:
> <TASK>
> __skb_gso_segment+0x327/0x6e0 net/core/dev.c:3411
> skb_gso_segment include/linux/netdevice.h:4749 [inline]
> validate_xmit_skb+0x6bc/0xf10 net/core/dev.c:3669
> validate_xmit_skb_list+0xbc/0x120 net/core/dev.c:3719
> sch_direct_xmit+0x3d1/0xbe0 net/sched/sch_generic.c:327
> __dev_xmit_skb net/core/dev.c:3815 [inline]
> __dev_queue_xmit+0x14a1/0x3a00 net/core/dev.c:4219
> packet_snd net/packet/af_packet.c:3071 [inline]
> packet_sendmsg+0x21cb/0x5550 net/packet/af_packet.c:3102
> sock_sendmsg_nosec net/socket.c:714 [inline]
> sock_sendmsg+0xcf/0x120 net/socket.c:734
> ____sys_sendmsg+0x6eb/0x810 net/socket.c:2492
> ___sys_sendmsg+0xf3/0x170 net/socket.c:2546
> __sys_sendmsg net/socket.c:2575 [inline]
> __do_sys_sendmsg net/socket.c:2584 [inline]
> __se_sys_sendmsg net/socket.c:2582 [inline]
> __x64_sys_sendmsg+0x132/0x220 net/socket.c:2582
> do_syscall_x64 arch/x86/entry/common.c:50 [inline]
> do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
> entry_SYSCALL_64_after_hwframe+0x46/0xb0
> RIP: 0033:0x7f4b95da06c9
> Code: 28 c3 e8 4a 15 00 00 66 2e 0f 1f 84 00 00 00 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 c0 ff ff ff f7 d8 64 89 01 48
> RSP: 002b:00007ffd7defc4c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
> RAX: ffffffffffffffda RBX: 00007ffd7defc4f0 RCX: 00007f4b95da06c9
> RDX: 0000000000000000 RSI: 0000000020000140 RDI: 0000000000000003
> RBP: 0000000000000003 R08: bb1414ac00000050 R09: bb1414ac00000050
> R10: 0000000000000004 R11: 0000000000000246 R12: 0000000000000000
> R13: 00007ffd7defc4e0 R14: 00007ffd7defc4d8 R15: 00007ffd7defc4d4
> </TASK>
>
> Fixes: dfed913e8b55 ("net/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Acked-by: Hangbin Liu <liuhangbin@gmail.com>
> Acked-by: Willem de Bruijn <willemb@google.com>
> Cc: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> net/packet/af_packet.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index 677f9cfa9660816a160a11bfa4c291431412005f..ca6e92a229239f9093900bf9249396cf0d410104 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -1935,8 +1935,10 @@ static void packet_parse_headers(struct sk_buff *skb, struct socket *sock)
> /* Move network header to the right position for VLAN tagged packets */
> if (likely(skb->dev->type == ARPHRD_ETHER) &&
> eth_type_vlan(skb->protocol) &&
> - __vlan_get_protocol(skb, skb->protocol, &depth) != 0)
> - skb_set_network_header(skb, depth);
> + __vlan_get_protocol(skb, skb->protocol, &depth) != 0) {
> + if (pskb_may_pull(skb, depth))
> + skb_set_network_header(skb, depth);
> + }
>
> skb_probe_transport_header(skb);
> }
> --
> 2.36.1.255.ge46751e96f-goog
next prev parent reply other threads:[~2022-06-02 19:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-02 16:18 [PATCH v2 net 0/3] net: af_packet: be careful when expanding mac header size Eric Dumazet
2022-06-02 16:18 ` [PATCH v2 net 1/3] net: CONFIG_DEBUG_NET depends on CONFIG_NET Eric Dumazet
2022-06-02 16:18 ` [PATCH v2 net 2/3] net: add debug info to __skb_pull() Eric Dumazet
2022-06-02 16:18 ` [PATCH v2 net 3/3] net/af_packet: make sure to pull mac header Eric Dumazet
2022-06-02 19:49 ` Michael S. Tsirkin [this message]
2022-06-02 18:20 ` [PATCH v2 net 0/3] net: af_packet: be careful when expanding mac header size patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220602154941-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=kuba@kernel.org \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=syzkaller@googlegroups.com \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.