lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7c583798-61a9-416f-b437-ae452440c424@kernel.org>
Date: Mon, 22 Dec 2025 18:12:23 -0500
From: David Ahern <dsahern@...nel.org>
To: Ido Schimmel <idosch@...dia.com>, netdev@...r.kernel.org
Cc: davem@...emloft.net, kuba@...nel.org, pabeni@...hat.com,
 edumazet@...gle.com, horms@...nel.org, penguin-kernel@...ove.SAKURA.ne.jp
Subject: Re: [PATCH net 1/2] ipv4: Fix reference count leak when using error
 routes with nexthop objects

On 12/21/25 7:48 AM, Ido Schimmel wrote:
> When a nexthop object is deleted, it is marked as dead and then
> fib_table_flush() is called to flush all the routes that are using the
> dead nexthop.
> 
> The current logic in fib_table_flush() is to only flush error routes
> (e.g., blackhole) when it is called as part of network namespace
> dismantle (i.e., with flush_all=true). Therefore, error routes are not
> flushed when their nexthop object is deleted:
> 
>  # ip link add name dummy1 up type dummy
>  # ip nexthop add id 1 dev dummy1
>  # ip route add 198.51.100.1/32 nhid 1
>  # ip route add blackhole 198.51.100.2/32 nhid 1
>  # ip nexthop del id 1
>  # ip route show
>  blackhole 198.51.100.2 nhid 1 dev dummy1
> 
> As such, they keep holding a reference on the nexthop object which in
> turn holds a reference on the nexthop device, resulting in a reference
> count leak:
> 
>  # ip link del dev dummy1
>  [   70.516258] unregister_netdevice: waiting for dummy1 to become free. Usage count = 2
> 
> Fix by flushing error routes when their nexthop is marked as dead.
> 
> IPv6 does not suffer from this problem.
> 
> Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
> Reported-by: Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
> Closes: https://lore.kernel.org/netdev/d943f806-4da6-4970-ac28-b9373b0e63ac@I-love.SAKURA.ne.jp/
> Reported-by: syzbot+881d65229ca4f9ae8c84@...kaller.appspotmail.com
> Signed-off-by: Ido Schimmel <idosch@...dia.com>
> ---
>  net/ipv4/fib_trie.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 59a6f0a9638f..7e2c17fec3fc 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -2053,10 +2053,11 @@ int fib_table_flush(struct net *net, struct fib_table *tb, bool flush_all)
>  				continue;
>  			}
>  
> -			/* Do not flush error routes if network namespace is
> -			 * not being dismantled
> +			/* When not flushing the entire table, skip error
> +			 * routes that are not marked for deletion.
>  			 */
> -			if (!flush_all && fib_props[fa->fa_type].error) {
> +			if (!flush_all && fib_props[fa->fa_type].error &&
> +			    !(fi->fib_flags & RTNH_F_DEAD)) {
>  				slen = fa->fa_slen;
>  				continue;
>  			}


Reviewed-by: David Ahern <dsahern@...nel.org>

thanks for the fast turnaround, Ido.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ