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]
Date:   Tue, 14 Mar 2023 19:12:24 +0200
From:   Ido Schimmel <idosch@...sch.org>
To:     gaoxingwang <gaoxingwang1@...wei.com>
Cc:     netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
        davem@...emloft.net, yoshfuji@...ux-ipv6.org, kuba@...nel.org,
        pabeni@...hat.com, shuah@...nel.org, liaichun@...wei.com,
        yanan@...wei.com
Subject: Re: ipv4:the same route is added repeatedly

On Tue, Mar 14, 2023 at 10:41:59PM +0800, gaoxingwang wrote:
> When i add default route in /etc/sysconfig/static-routes, and then restart network service, it appears to add two same default route:
> [root@...alhost ~]# ip r
> default via 9.82.0.1 dev eth0 
> default via 9.82.0.1 dev eth0 
> 
> The static-routes file contents are as follows:
> any net 0.0.0.0 netmask 0.0.0.0 gw 110.1.62.1
> 
> This problem seems to be related to patch f96a3d7455(ipv4: Fix incorrect route flushing when source address is deleted). When I revert this patch, the problem gets fixed.
> Is that a known issue?

'fi->fib_tb_id' is initialized from 'cfg->fc_table' which is not
initialized in the IOCTL path which I guess is what you are using given
the syntax of the file. You can therefore end up having two identical
routes that only differ in their FIB info due to its associated table
ID.

Can you try this fix [1]? Seems to be working for me. Tested using this
reproducer [2].

With f96a3d7455:

 # ./ioctl_repro.sh
 default via 192.0.2.2 dev dummy10
 default via 192.0.2.2 dev dummy10

With f96a3d7455 reverted:

 # ./ioctl_repro.sh
 SIOCADDRT: File exists
 default via 192.0.2.2 dev dummy10

With the fix:

 # ./ioctl_repro.sh
 SIOCADDRT: File exists
 default via 192.0.2.2 dev dummy10

Thanks

[1]
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index b5736ef16ed2..390f4be7f7be 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -576,6 +576,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
 			cfg->fc_scope = RT_SCOPE_UNIVERSE;
 	}
 
+	if (!cfg->fc_table)
+		cfg->fc_table = RT_TABLE_MAIN;
+
 	if (cmd == SIOCDELRT)
 		return 0;
 
[2]
#!/bin/bash

ip link del dev dummy10 &> /dev/null
ip link add name dummy10 up type dummy
ip address add 192.0.2.1/24 dev dummy10

ip route add default via 192.0.2.2
route add default gw 192.0.2.2
ip -4 r show default

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ