All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ido Schimmel <idosch@nvidia.com>
To: Chase Hiltz <me@chasehil.tz>
Cc: netdev@vger.kernel.org, dsahern@kernel.org, davem@davemloft.net,
	edumazet@kernel.org, kuba@kernel.org, pabeni@redhat.com,
	horms@kernel.org, weiwan@google.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v2] ipv4: route: don't blackhole in-use routes when retiring fnhe routes
Date: Mon, 9 Nov 2026 14:48:08 +0200	[thread overview]
Message-ID: <20261109124808.GA1658897@shredder> (raw)
In-Reply-To: <20261105182640.2999521-1-me@chasehil.tz>

On Thu, Nov 05, 2026 at 02:26:40PM -0400, Chase Hiltz wrote:
> When a route cached in a nexthop exception (fnhe) is replaced or
> flushed, rt_bind_exception() and fnhe_flush_routes() call
> dst_dev_put() on it. That sets dst->dev to blackhole_netdev and
> dst->input/output to dst_discard*(), but other CPUs can still be
> using the route, e.g. as a noref dst taken from the fnhe under RCU.
> Packets that reach dst_input() or dst_output() after that are dropped.
> 
> If dst_dev_put() runs after a forwarded packet has entered ip_output(),
> ip_skb_dst_mtu() in __ip_finish_output() can return the MTU of
> blackhole_netdev (68), and ip_fragment() can then drop a DF packet and
> send ICMP_FRAG_NEEDED with mtu 68 to its source.
> 
> Commit 5018c59607a5 ("ipv4: fix race condition between route lookup and
> invalidation") fixed the same race in rt_cache_route() by putting the
> old route on the uncached list instead of calling dst_dev_put(). Do the
> same for routes retired from an fnhe. rt_flush_dev() still moves them
> to blackhole_netdev when their device is unregistered.
> 
> fnhe routes are also retired on fnhe expiry (ip_del_fnhe()) and
> eviction (fnhe_remove_oldest()). Those paths don't bump rt_genid, so
> without the obsolete marking ipv4_dst_check() could still accept the
> route. Keep marking retired routes DST_OBSOLETE_DEAD, as dst_dev_put()
> did, so that users that cached them, such as sockets, look up again.
> 
> In a netns reproducer that forwards IPv4 traffic over an ip6tnl device,
> with an fnhe for the destination, while the FIB keeps changing, this
> patch stops the mtu 68 ICMPs and the drops.
> 
> Fixes: 95c47f9cf5e0 ("ipv4: call dst_dev_put() properly")
> Reviewed-by: Eric Dumazet <edumazet@kernel.org>
> Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>

The tag is deprecated since commit 1e035297ffda ("docs: remove
Assisted-by references"). Jakub / Paolo will probably strip it when
applying, so no need for v3 just for that.

> Signed-off-by: Chase Hiltz <me@chasehil.tz>

Reviewed-by: Ido Schimmel <idosch@nvidia.com>

  reply	other threads:[~2026-11-09 12:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-05 18:26 [PATCH net v2] ipv4: route: don't blackhole in-use routes when retiring fnhe routes Chase Hiltz
2026-11-09 12:48 ` Ido Schimmel [this message]
2026-11-10 22:10 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261109124808.GA1658897@shredder \
    --to=idosch@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@kernel.org \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@chasehil.tz \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=weiwan@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.