mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 01:08:13 -04:00
ipv6: fix missing notification for ignore_routes_with_linkdown
When changing the ignore_routes_with_linkdown sysctl for a specific
interface, the RTM_NEWNETCONF netlink notification was not being emitted
to userspace. Fix this by emitting the notification when needed.
In addition, fix bogus return value for successful "all" and specific
interface write operation leading to a wrong reset of the position
pointer.
Fixes: 35103d1117 ("net: ipv6 sysctl option to ignore routes when nexthop link is down")
Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260622130857.5115-7-fmancera@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
6a1b50e585
commit
17dc3b245d
@@ -955,11 +955,7 @@ static int addrconf_fixup_linkdown(const struct ctl_table *table, int *p, int ne
|
||||
NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
NETCONFA_IFINDEX_DEFAULT,
|
||||
net->ipv6.devconf_dflt);
|
||||
rtnl_net_unlock(net);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (p == &net->ipv6.devconf_all->ignore_routes_with_linkdown) {
|
||||
} else if (p == &net->ipv6.devconf_all->ignore_routes_with_linkdown) {
|
||||
WRITE_ONCE(net->ipv6.devconf_dflt->ignore_routes_with_linkdown, newf);
|
||||
addrconf_linkdown_change(net, newf);
|
||||
if ((!newf) ^ (!old))
|
||||
@@ -968,11 +964,21 @@ static int addrconf_fixup_linkdown(const struct ctl_table *table, int *p, int ne
|
||||
NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
NETCONFA_IFINDEX_ALL,
|
||||
net->ipv6.devconf_all);
|
||||
} else {
|
||||
if (!newf ^ !old) {
|
||||
struct inet6_dev *idev = table->extra1;
|
||||
|
||||
inet6_netconf_notify_devconf(net,
|
||||
RTM_NEWNETCONF,
|
||||
NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
idev->dev->ifindex,
|
||||
&idev->cnf);
|
||||
}
|
||||
}
|
||||
|
||||
rtnl_net_unlock(net);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user