diff options
author | Aditya Pakki <pakki001@umn.edu> | 2018-12-24 17:30:17 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-12-28 01:18:03 +0100 |
commit | f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded (patch) | |
tree | d81f5dc4f0712579670180ecc6f370271a8d7d30 /net | |
parent | tipc: fix a double free in tipc_enable_bearer() (diff) | |
download | linux-f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded.tar.xz linux-f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded.zip |
ipv6/route: Add a missing check on proc_dointvec
While flushing the cache via ipv6_sysctl_rtcache_flush(), the call
to proc_dointvec() may fail. The fix adds a check that returns the
error, on failure.
Signed-off-by: Aditya Pakki <pakki001@umn.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/route.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 194bc162866d..a94e0b02a8ac 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -5054,12 +5054,16 @@ int ipv6_sysctl_rtcache_flush(struct ctl_table *ctl, int write, { struct net *net; int delay; + int ret; if (!write) return -EINVAL; net = (struct net *)ctl->extra1; delay = net->ipv6.sysctl.flush_delay; - proc_dointvec(ctl, write, buffer, lenp, ppos); + ret = proc_dointvec(ctl, write, buffer, lenp, ppos); + if (ret) + return ret; + fib6_run_gc(delay <= 0 ? 0 : (unsigned long)delay, net, delay > 0); return 0; } |