Eric Dumazet
3525bdd398
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-17 00:29:34 +07:00
..
2018-11-15 21:36:32 +03:00
2021-11-16 23:25:19 +03:00
2020-05-25 14:01:29 +03:00
2022-06-20 23:23:32 +03:00
2022-11-28 21:40:54 +03:00
2020-05-25 14:01:29 +03:00
2020-11-25 18:27:55 +03:00
2020-09-09 21:39:13 +03:00
2022-01-31 17:10:19 +03:00
2021-01-12 18:32:22 +03:00
2020-06-11 22:17:57 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2021-03-16 19:12:45 +03:00
2020-05-25 14:01:29 +03:00
2022-07-04 10:26:10 +03:00
2019-02-11 22:51:32 +03:00
2020-03-15 13:56:31 +03:00
2019-06-22 20:41:52 +03:00
2023-02-17 00:29:34 +07:00
2021-03-16 19:12:45 +03:00
2021-04-12 16:54:43 +03:00
2022-03-03 08:29:29 +03:00
2018-11-15 21:36:32 +03:00
2022-10-12 13:51:48 +03:00
2023-02-17 00:29:34 +07:00
2019-02-11 23:38:52 +03:00
2022-01-12 11:59:17 +03:00
2022-02-18 22:08:20 +03:00
2018-11-15 21:36:32 +03:00
2022-12-09 20:21:33 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2019-07-19 19:03:44 +07:00
2021-06-17 12:40:34 +03:00
2018-11-15 21:36:32 +03:00
2020-04-03 13:41:51 +03:00
2018-11-15 21:36:32 +03:00
2021-07-25 20:02:04 +03:00
2022-08-30 17:30:20 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2023-01-29 21:28:35 +07:00
2020-02-08 10:10:33 +03:00
2021-04-16 17:31:54 +03:00
2023-02-17 00:29:34 +07:00
2020-11-25 18:21:48 +03:00
2018-11-15 21:36:32 +03:00
2022-10-26 16:33:33 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2019-02-15 06:19:09 +07:00
2021-10-06 17:15:25 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2019-02-08 22:00:27 +03:00
2019-02-08 22:00:27 +03:00
2021-07-29 23:33:07 +03:00
2022-12-09 20:21:33 +03:00
2018-11-15 21:36:32 +03:00
2018-11-15 21:36:32 +03:00
2019-05-27 14:53:29 +03:00