Skip to content

Commit

Permalink
sysctl: ipv6: use correct net in ipv6_sysctl_rtcache_flush
Browse files Browse the repository at this point in the history
Before this patch issuing these commands:

  fd = open("/proc/sys/net/ipv6/route/flush")
  unshare(CLONE_NEWNET)
  write(fd, "stuff")

would flush the newly created net, not the original one.

The equivalent ipv4 code is correct (stores the net inside ->extra1).
Acked-by: Daniel Lezcano <daniel.lezcano@free.fr>

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Lucian Adrian Grijincu authored and David S. Miller committed Feb 25, 2011
1 parent cdf64c8 commit c486da3
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -2557,14 +2557,16 @@ static
int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
struct net *net = current->nsproxy->net_ns;
int delay = net->ipv6.sysctl.flush_delay;
if (write) {
proc_dointvec(ctl, write, buffer, lenp, ppos);
fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay, net);
return 0;
} else
struct net *net;
int delay;
if (!write)
return -EINVAL;

net = (struct net *)ctl->extra1;
delay = net->ipv6.sysctl.flush_delay;
proc_dointvec(ctl, write, buffer, lenp, ppos);
fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay, net);
return 0;
}

ctl_table ipv6_route_table_template[] = {
Expand Down Expand Up @@ -2651,6 +2653,7 @@ struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)

if (table) {
table[0].data = &net->ipv6.sysctl.flush_delay;
table[0].extra1 = net;
table[1].data = &net->ipv6.ip6_dst_ops.gc_thresh;
table[2].data = &net->ipv6.sysctl.ip6_rt_max_size;
table[3].data = &net->ipv6.sysctl.ip6_rt_gc_min_interval;
Expand Down

0 comments on commit c486da3

Please sign in to comment.