diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2026-01-12 08:51:13 +0100 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2026-01-12 08:51:13 +0100 |
| commit | e92d336eaf244d27b88f6d8742b776ae72173992 (patch) | |
| tree | f436db9680ca65bdc4f034c7e70e781691312389 /net/ipv6/route.c | |
| parent | 8314d2c28d3369bc879af8e848f810292b16d0af (diff) | |
| parent | 0f61b1860cc3f52aef9036d7235ed1f017632193 (diff) | |
Merge 6.19-rc5 into char-misc-next
We need the char/misc fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/ipv6/route.c')
| -rw-r--r-- | net/ipv6/route.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index aee6a10b112a..a3e051dc66ee 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1470,7 +1470,18 @@ static struct rt6_info *rt6_make_pcpu_route(struct net *net, p = this_cpu_ptr(res->nh->rt6i_pcpu); prev = cmpxchg(p, NULL, pcpu_rt); - BUG_ON(prev); + if (unlikely(prev)) { + /* + * Another task on this CPU already installed a pcpu_rt. + * This can happen on PREEMPT_RT where preemption is possible. + * Free our allocation and return the existing one. + */ + WARN_ON_ONCE(!IS_ENABLED(CONFIG_PREEMPT_RT)); + + dst_dev_put(&pcpu_rt->dst); + dst_release(&pcpu_rt->dst); + return prev; + } if (res->f6i->fib6_destroying) { struct fib6_info *from; |
