Jiayuan Chen
f81b0c2d28
netfilter: nft_fib_ipv6: handle routes via external nexthop
fib6_info has a union:
union {
struct list_head fib6_siblings;
struct list_head nh_list;
};
Old-style multipath (ip -6 route add ... nexthop ... nexthop ...) uses
fib6_siblings. External nexthop (ip -6 route add ... nhid N) uses
nh_list, linked into &nh->f6i_list.
nft_fib6_info_nh_uses_dev() blindly walks &rt->fib6_siblings, causing
an OOB read past the struct nexthop slab when rt->nh is set:
==================================================================
BUG: KASAN: slab-out-of-bounds in nft_fib6_eval+0x1362/0x16c0
Read of size 8 at addr ffff888103a099d0 by task ping/386
CPU: 2 UID: 0 PID: 386 Comm: ping Not tainted 7.1.0-rc3+ #251 PREEMPT
Call Trace:
<IRQ>
dump_stack_lvl+0x76/0xa0
print_report+0xd1/0x5f0
kasan_report+0xe7/0x130
__asan_report_load8_noabort+0x14/0x30
nft_fib6_eval+0x1362/0x16c0
nft_do_chain+0x279/0x18c0
nft_do_chain_ipv6+0x1a8/0x230
nf_hook_slow+0xad/0x200
ipv6_rcv+0x152/0x380
__netif_receive_skb_one_core+0x118/0x1c0
==================================================================
Branch by route shape: when rt->nh is set, walk via
nexthop_for_each_fib6_nh() (also covers nh groups, which the original
code missed); otherwise walk fib6_siblings, guarded by READ_ONCE() of
rt->fib6_nsiblings as required by commit 31d7d67ba1 ("ipv6: annotate
data-races around rt->fib6_nsiblings").
Fixes: 1c32b24c23 ("netfilter: nft_fib_ipv6: switch to fib6_lookup")
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Signed-off-by: Florian Westphal <fw@strlen.de>
2026-05-22 12:28:46 +02:00
..
2025-07-10 15:27:32 -07:00
2026-04-16 02:57:01 +00:00
2026-02-21 17:09:51 -08:00
2026-04-23 12:13:57 +02:00
2026-05-18 16:33:34 -07:00
2026-05-12 18:07:02 -07:00
2026-05-19 10:43:54 +02:00
2026-05-20 16:35:47 -04:00
2026-04-12 15:42:57 -07:00
2026-05-22 12:28:46 +02:00
2026-04-14 18:36:10 -07:00
2026-05-12 21:00:59 +02:00
2026-05-21 08:47:36 -07:00
2026-02-21 17:09:51 -08:00
2026-04-09 13:20:59 -07:00
2026-03-09 18:32:45 -07:00
2026-04-16 19:10:48 -07:00
2026-03-16 19:29:45 -07:00
2026-05-12 18:45:13 -07:00
2026-02-21 01:02:28 -08:00
2026-05-15 18:25:26 -07:00
2026-03-02 18:17:17 -08:00
2026-05-21 11:31:05 +02:00
2026-05-22 12:28:46 +02:00
2026-03-31 20:14:56 -07:00
2026-02-23 17:26:55 -08:00
2026-04-13 12:19:01 -07:00
2026-05-21 08:47:20 -07:00
2025-04-15 17:54:56 -07:00
2026-02-21 01:02:28 -08:00
2026-04-23 11:40:39 -07:00
2026-05-20 11:20:37 +02:00
2026-03-16 19:29:45 -07:00
2026-04-30 13:36:47 -07:00
2026-04-02 11:03:13 -07:00
2026-05-19 15:36:35 +02:00
2026-03-06 17:34:48 -08:00
2026-05-22 12:28:46 +02:00
2026-02-21 17:09:51 -08:00
2026-05-08 15:43:29 -07:00
2026-04-12 11:40:45 -07:00
2026-05-18 16:38:45 -07:00
2026-04-22 20:16:34 -07:00
2026-05-21 07:38:21 -07:00
2026-02-21 01:02:28 -08:00
2026-05-04 19:25:14 -07:00
2026-04-14 12:04:00 -07:00
2026-05-14 17:06:59 -07:00
2026-04-07 12:35:04 +02:00
2026-05-20 16:36:45 -07:00
2026-05-13 17:53:39 -07:00
2026-05-08 18:21:09 -07:00
2026-05-20 16:34:20 -07:00
2026-05-14 12:20:06 +02:00
2026-04-14 12:37:00 +02:00
2026-05-15 13:11:41 -07:00
2026-03-19 13:14:00 +01:00
2026-04-23 16:50:42 -07:00
2026-05-14 18:19:44 -07:00
2026-05-19 18:53:56 -07:00
2026-05-21 13:14:01 +02:00
2026-05-20 11:44:19 +02:00
2026-04-13 12:19:01 -07:00
2026-05-09 18:42:54 -07:00
2026-04-29 11:27:34 +02:00
2025-11-26 13:45:23 -07:00
2026-04-23 10:24:02 -07:00
2026-04-23 10:24:02 -07:00
2026-04-14 18:36:10 -07:00