mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
ipv6: fix error handling in forwarding sysctl
When writing to the forwarding sysctl, if proc_dointvec() fails to parse
the input, it returns a negative error code. The current implementation
is overwriting that error for write operations.
This results in a silent failure, it returns a successful write although
the configuration was not modified at all. When modifying the "all"
variant it can also modify the configuration of existing interfaces to
the wrong value.
Fix this by checking the return value of proc_dointvec() and returning
early on failure. In addition, adjust return code of
addrconf_fixup_forwarding() for successful operation.
Fixes: b325fddb7f ("ipv6: Fix sysctl unregistration deadlock")
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-4-fmancera@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
cf4f2b1440
commit
058b9b19f9
|
|
@ -913,7 +913,7 @@ static int addrconf_fixup_forwarding(const struct ctl_table *table, int *p, int
|
|||
|
||||
if (newf)
|
||||
rt6_purge_dflt_routers(net);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void addrconf_linkdown_change(struct net *net, __s32 newf)
|
||||
|
|
@ -6370,6 +6370,8 @@ static int addrconf_sysctl_forward(const struct ctl_table *ctl, int write,
|
|||
lctl.data = &val;
|
||||
|
||||
ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (write)
|
||||
ret = addrconf_fixup_forwarding(ctl, valp, val);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user