Eric Dumazet
af51fc23a0
ipv6: ensure sane device mtu in tunnels
...
commit d89d7ff01235f218dad37de84457717f699dee79 upstream.
Another syzbot report [1] with no reproducer hints
at a bug in ip6_gre tunnel (dev:ip6gretap0)
Since ipv6 mcast code makes sure to read dev->mtu once
and applies a sanity check on it (see commit b9b312a7a451
"ipv6: mcast: better catch silly mtu values"), a remaining
possibility is that a layer is able to set dev->mtu to
an underflowed value (high order bit set).
This could happen indeed in ip6gre_tnl_link_config_route(),
ip6_tnl_link_config() and ipip6_tunnel_bind_dev()
Make sure to sanitize mtu value in a local variable before
it is written once on dev->mtu, as lockless readers could
catch wrong temporary value.
[1]
skbuff: skb_over_panic: text:ffff80000b7a2f38 len:40 put:40 head:ffff000149dcf200 data:ffff000149dcf2b0 tail:0xd8 end:0xc0 dev:ip6gretap0
------------[ cut here ]------------
kernel BUG at net/core/skbuff.c:120
Internal error: Oops - BUG: 00000000f2000800 [#1 ] PREEMPT SMP
Modules linked in:
CPU: 1 PID: 10241 Comm: kworker/1:1 Not tainted 6.0.0-rc7-syzkaller-18095-gbbed346d5a96 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/30/2022
Workqueue: mld mld_ifc_work
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : skb_panic+0x4c/0x50 net/core/skbuff.c:116
lr : skb_panic+0x4c/0x50 net/core/skbuff.c:116
sp : ffff800020dd3b60
x29: ffff800020dd3b70 x28: 0000000000000000 x27: ffff00010df2a800
x26: 00000000000000c0 x25: 00000000000000b0 x24: ffff000149dcf200
x23: 00000000000000c0 x22: 00000000000000d8 x21: ffff80000b7a2f38
x20: ffff00014c2f7800 x19: 0000000000000028 x18: 00000000000001a9
x17: 0000000000000000 x16: ffff80000db49158 x15: ffff000113bf1a80
x14: 0000000000000000 x13: 00000000ffffffff x12: ffff000113bf1a80
x11: ff808000081c0d5c x10: 0000000000000000 x9 : 73f125dc5c63ba00
x8 : 73f125dc5c63ba00 x7 : ffff800008161d1c x6 : 0000000000000000
x5 : 0000000000000080 x4 : 0000000000000001 x3 : 0000000000000000
x2 : ffff0001fefddcd0 x1 : 0000000100000000 x0 : 0000000000000089
Call trace:
skb_panic+0x4c/0x50 net/core/skbuff.c:116
skb_over_panic net/core/skbuff.c:125 [inline]
skb_put+0xd4/0xdc net/core/skbuff.c:2049
ip6_mc_hdr net/ipv6/mcast.c:1714 [inline]
mld_newpack+0x14c/0x270 net/ipv6/mcast.c:1765
add_grhead net/ipv6/mcast.c:1851 [inline]
add_grec+0xa20/0xae0 net/ipv6/mcast.c:1989
mld_send_cr+0x438/0x5a8 net/ipv6/mcast.c:2115
mld_ifc_work+0x38/0x290 net/ipv6/mcast.c:2653
process_one_work+0x2d8/0x504 kernel/workqueue.c:2289
worker_thread+0x340/0x610 kernel/workqueue.c:2436
kthread+0x12c/0x158 kernel/kthread.c:376
ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
Code: 91011400 aa0803e1 a90027ea 94373093 (d4210000)
Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20221024020124.3756833-1-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ta: Backport patch for stable kernels < 5.10.y. Fix conflict in
net/ipv6/ip6_tunnel.c, mtu initialized with:
mtu = rt->dst.dev->mtu - t_hlen;]
Cc: <stable@vger.kernel.org> # 4.14.y, 4.19.y, 5.4.y
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-02-06 07:52:51 +01:00
..
2021-09-15 09:47:31 +02:00
2022-12-14 11:30:41 +01:00
2023-01-18 11:41:37 +01:00
2021-12-01 09:23:34 +01:00
2021-04-07 14:47:41 +02:00
2022-10-29 10:20:35 +02:00
2022-04-20 09:19:40 +02:00
2022-05-18 09:47:24 +02:00
2023-02-06 07:52:43 +01:00
2023-01-18 11:41:04 +01:00
2021-07-14 16:53:33 +02:00
2022-09-28 11:04:07 +02:00
2023-01-18 11:41:58 +01:00
2022-12-14 11:30:44 +01:00
2020-11-05 11:43:34 +01:00
2023-02-06 07:52:45 +01:00
2022-03-08 19:07:51 +01:00
2022-12-08 11:22:59 +01:00
2021-07-28 13:30:56 +02:00
2020-04-23 10:36:45 +02:00
2022-12-14 11:30:45 +01:00
2023-01-18 11:41:09 +01:00
2022-11-03 23:56:54 +09:00
2023-02-06 07:52:45 +01:00
2023-02-06 07:52:51 +01:00
2021-03-07 12:20:42 +01:00
2022-11-25 17:42:21 +01:00
2022-12-08 11:22:57 +01:00
2023-02-06 07:52:38 +01:00
2022-04-27 13:50:47 +02:00
2021-02-10 09:25:28 +01:00
2022-03-28 08:46:48 +02:00
2022-12-08 11:22:57 +01:00
2022-12-14 11:30:45 +01:00
2021-12-08 09:01:12 +01:00
2022-01-05 12:37:45 +01:00
2023-02-06 07:52:47 +01:00
2022-04-15 14:18:35 +02:00
2023-02-06 07:52:45 +01:00
2023-02-06 07:52:46 +01:00
2023-02-06 07:52:37 +01:00
2023-01-18 11:41:32 +01:00
2023-01-18 11:41:45 +01:00
2022-01-11 15:23:33 +01:00
2021-09-03 10:08:12 +02:00
2022-10-26 13:22:26 +02:00
2020-11-24 13:29:05 +01:00
2022-11-10 17:57:51 +01:00
2023-01-18 11:41:33 +01:00
2023-02-06 07:52:46 +01:00
2023-02-06 07:52:46 +01:00
2022-09-15 12:04:50 +02:00
2021-11-17 09:48:48 +01:00
2023-01-18 11:41:56 +01:00
2021-10-27 09:54:24 +02:00
2023-01-18 11:42:06 +01:00
2022-07-29 17:14:12 +02:00
2022-12-14 11:30:44 +01:00
2023-01-18 11:41:13 +01:00
2023-01-18 11:41:08 +01:00
2022-11-25 17:42:16 +01:00
2021-12-22 09:29:40 +01:00
2022-10-26 13:22:49 +02:00
2021-06-18 09:59:00 +02:00
2020-04-01 11:02:18 +02:00
2022-09-05 10:27:42 +02:00