From: Gao feng <gaofeng@cn.fujitsu.com>
Date: Thu, 20 Jun 2013 02:01:34 +0000 (+0800)
Subject: neigh: disallow un-init_net to change thresh of neigh
X-Git-Tag: v3.11-rc1~16^2~47
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=dc25c676f54addb10e598daa9da9b8dd4fd487ab;p=users%2Fwilly%2Fxarray.git

neigh: disallow un-init_net to change thresh of neigh

thresh and interval are global resources,
only init net can change them.

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 86f9b165bbba..2569ab2cafbe 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -2049,6 +2049,12 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
 		}
 	}
 
+	err = -ENOENT;
+	if ((tb[NDTA_THRESH1] || tb[NDTA_THRESH2] ||
+	     tb[NDTA_THRESH3] || tb[NDTA_GC_INTERVAL]) &&
+	    !net_eq(net, &init_net))
+		goto errout_tbl_lock;
+
 	if (tb[NDTA_THRESH1])
 		tbl->gc_thresh1 = nla_get_u32(tb[NDTA_THRESH1]);