aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAditya Pakki <pakki001@umn.edu>2018-12-24 10:30:17 -0600
committerDavid S. Miller <davem@davemloft.net>2018-12-27 16:18:03 -0800
commitf0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded (patch)
treed81f5dc4f0712579670180ecc6f370271a8d7d30 /net
parenttipc: fix a double free in tipc_enable_bearer() (diff)
downloadlinux-dev-f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded.tar.xz
linux-dev-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.c6
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;
}