Description
In the Linux kernel, the following vulnerability has been resolved: ipv6: annotate data-race in ndisc_router_discovery() syzbot found that ndisc_router_discovery() could read and write in6_dev->ra_mtu without holding a lock [1] This looks fine, IFLA_INET6_RA_MTU is best effort. Add READ_ONCE()/WRITE_ONCE() to document the race. Note that we might also reject illegal MTU values (mtu < IPV6_MIN_MTU || mtu > skb->dev->mtu) in a future patch. [1] BUG: KCSAN: data-race in ndisc_router_discovery / ndisc_router_discovery read to 0xffff888119809c20 of 4 bytes by task 25817 on cpu 1: ndisc_router_discovery+0x151d/0x1c90 net/ipv6/ndisc.c:1558 ndisc_rcv+0x2ad/0x3d0 net/ipv6/ndisc.c:1841 icmpv6_rcv+0xe5a/0x12f0 net/ipv6/icmp.c:989 ip6_protocol_deliver_rcu+0xb2a/0x10d0 net/ipv6/ip6_input.c:438 ip6_input_finish+0xf0/0x1d0 net/ipv6/ip6_input.c:489 NF_HOOK include/linux/netfilter.h:318 [inline] ip6_input+0x5e/0x140 net/ipv6/ip6_input.c:500 ip6_mc_input+0x27c/0x470 net/ipv6/ip6_input.c:590 dst_input include/net/dst.h:474 [inline] ip6_rcv_finish+0x336/0x340 net/ipv6/ip6_input.c:79 ... write to 0xffff888119809c20 of 4 bytes by task 25816 on cpu 0: ndisc_router_discovery+0x155a/0x1c90 net/ipv6/ndisc.c:1559 ndisc_rcv+0x2ad/0x3d0 net/ipv6/ndisc.c:1841 icmpv6_rcv+0xe5a/0x12f0 net/ipv6/icmp.c:989 ip6_protocol_deliver_rcu+0xb2a/0x10d0 net/ipv6/ip6_input.c:438 ip6_input_finish+0xf0/0x1d0 net/ipv6/ip6_input.c:489 NF_HOOK include/linux/netfilter.h:318 [inline] ip6_input+0x5e/0x140 net/ipv6/ip6_input.c:500 ip6_mc_input+0x27c/0x470 net/ipv6/ip6_input.c:590 dst_input include/net/dst.h:474 [inline] ip6_rcv_finish+0x336/0x340 net/ipv6/ip6_input.c:79 ... value changed: 0x00000000 -> 0xe5400659
Product status
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before 4630897eb1a039b5d7b737b8dc9521d9d4b568b5
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before 2619499169fb1c2ac4974b0f2d87767fb543582b
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before fad8f4ff7928f4d52a062ffdcffa484989c79c47
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before 2a2b9d25f801afecf2f83cacce98afa8fd73e3c9
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before e3c1040252e598f7b4e33a42dc7c38519bc22428
49b99da2c9ce13ffcd93fe3a0f5670791c1d76f7 (git) before 9a063f96d87efc3a6cc667f8de096a3d38d74bb5
5.15
Any version before 5.15
5.15.199 (semver)
6.1.162 (semver)
6.6.122 (semver)
6.12.68 (semver)
6.18.8 (semver)
6.19 (original_commit_for_fix)
References
git.kernel.org/...c/4630897eb1a039b5d7b737b8dc9521d9d4b568b5
git.kernel.org/...c/2619499169fb1c2ac4974b0f2d87767fb543582b
git.kernel.org/...c/fad8f4ff7928f4d52a062ffdcffa484989c79c47
git.kernel.org/...c/2a2b9d25f801afecf2f83cacce98afa8fd73e3c9
git.kernel.org/...c/e3c1040252e598f7b4e33a42dc7c38519bc22428
git.kernel.org/...c/9a063f96d87efc3a6cc667f8de096a3d38d74bb5