diff options
-rw-r--r-- | fs/proc/proc_net.c | 6 | ||||
-rw-r--r-- | include/linux/seq_file.h | 7 | ||||
-rw-r--r-- | net/core/neighbour.c | 8 | ||||
-rw-r--r-- | net/ipv4/fib_hash.c | 5 | ||||
-rw-r--r-- | net/ipv4/fib_trie.c | 13 | ||||
-rw-r--r-- | net/ipv4/raw.c | 4 | ||||
-rw-r--r-- | net/ipv4/route.c | 29 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 4 | ||||
-rw-r--r-- | net/ipv6/mcast.c | 4 | ||||
-rw-r--r-- | net/netfilter/x_tables.c | 4 | ||||
-rw-r--r-- | net/netlink/af_netlink.c | 6 | ||||
-rw-r--r-- | net/unix/af_unix.c | 10 |
12 files changed, 53 insertions, 47 deletions
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c index 4caa5f774fb7..13cd7835d0df 100644 --- a/fs/proc/proc_net.c +++ b/fs/proc/proc_net.c | |||
@@ -44,7 +44,9 @@ int seq_open_net(struct inode *ino, struct file *f, | |||
44 | put_net(net); | 44 | put_net(net); |
45 | return -ENOMEM; | 45 | return -ENOMEM; |
46 | } | 46 | } |
47 | #ifdef CONFIG_NET_NS | ||
47 | p->net = net; | 48 | p->net = net; |
49 | #endif | ||
48 | return 0; | 50 | return 0; |
49 | } | 51 | } |
50 | EXPORT_SYMBOL_GPL(seq_open_net); | 52 | EXPORT_SYMBOL_GPL(seq_open_net); |
@@ -52,12 +54,10 @@ EXPORT_SYMBOL_GPL(seq_open_net); | |||
52 | int seq_release_net(struct inode *ino, struct file *f) | 54 | int seq_release_net(struct inode *ino, struct file *f) |
53 | { | 55 | { |
54 | struct seq_file *seq; | 56 | struct seq_file *seq; |
55 | struct seq_net_private *p; | ||
56 | 57 | ||
57 | seq = f->private_data; | 58 | seq = f->private_data; |
58 | p = seq->private; | ||
59 | 59 | ||
60 | put_net(p->net); | 60 | put_net(seq_file_net(seq)); |
61 | seq_release_private(ino, f); | 61 | seq_release_private(ino, f); |
62 | return 0; | 62 | return 0; |
63 | } | 63 | } |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 67c2563961f3..d870a8253769 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
6 | #include <linux/string.h> | 6 | #include <linux/string.h> |
7 | #include <linux/mutex.h> | 7 | #include <linux/mutex.h> |
8 | #include <net/net_namespace.h> | ||
8 | 9 | ||
9 | struct seq_operations; | 10 | struct seq_operations; |
10 | struct file; | 11 | struct file; |
@@ -64,7 +65,9 @@ extern struct list_head *seq_list_next(void *v, struct list_head *head, | |||
64 | 65 | ||
65 | struct net; | 66 | struct net; |
66 | struct seq_net_private { | 67 | struct seq_net_private { |
68 | #ifdef CONFIG_NET_NS | ||
67 | struct net *net; | 69 | struct net *net; |
70 | #endif | ||
68 | }; | 71 | }; |
69 | 72 | ||
70 | int seq_open_net(struct inode *, struct file *, | 73 | int seq_open_net(struct inode *, struct file *, |
@@ -72,7 +75,11 @@ int seq_open_net(struct inode *, struct file *, | |||
72 | int seq_release_net(struct inode *, struct file *); | 75 | int seq_release_net(struct inode *, struct file *); |
73 | static inline struct net *seq_file_net(struct seq_file *seq) | 76 | static inline struct net *seq_file_net(struct seq_file *seq) |
74 | { | 77 | { |
78 | #ifdef CONFIG_NET_NS | ||
75 | return ((struct seq_net_private *)seq->private)->net; | 79 | return ((struct seq_net_private *)seq->private)->net; |
80 | #else | ||
81 | return &init_net; | ||
82 | #endif | ||
76 | } | 83 | } |
77 | 84 | ||
78 | #endif | 85 | #endif |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 065fbac7ecd3..b8d491fb4b42 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -2145,7 +2145,7 @@ EXPORT_SYMBOL(__neigh_for_each_release); | |||
2145 | static struct neighbour *neigh_get_first(struct seq_file *seq) | 2145 | static struct neighbour *neigh_get_first(struct seq_file *seq) |
2146 | { | 2146 | { |
2147 | struct neigh_seq_state *state = seq->private; | 2147 | struct neigh_seq_state *state = seq->private; |
2148 | struct net *net = state->p.net; | 2148 | struct net *net = seq_file_net(seq); |
2149 | struct neigh_table *tbl = state->tbl; | 2149 | struct neigh_table *tbl = state->tbl; |
2150 | struct neighbour *n = NULL; | 2150 | struct neighbour *n = NULL; |
2151 | int bucket = state->bucket; | 2151 | int bucket = state->bucket; |
@@ -2186,7 +2186,7 @@ static struct neighbour *neigh_get_next(struct seq_file *seq, | |||
2186 | loff_t *pos) | 2186 | loff_t *pos) |
2187 | { | 2187 | { |
2188 | struct neigh_seq_state *state = seq->private; | 2188 | struct neigh_seq_state *state = seq->private; |
2189 | struct net *net = state->p.net; | 2189 | struct net *net = seq_file_net(seq); |
2190 | struct neigh_table *tbl = state->tbl; | 2190 | struct neigh_table *tbl = state->tbl; |
2191 | 2191 | ||
2192 | if (state->neigh_sub_iter) { | 2192 | if (state->neigh_sub_iter) { |
@@ -2246,7 +2246,7 @@ static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos) | |||
2246 | static struct pneigh_entry *pneigh_get_first(struct seq_file *seq) | 2246 | static struct pneigh_entry *pneigh_get_first(struct seq_file *seq) |
2247 | { | 2247 | { |
2248 | struct neigh_seq_state *state = seq->private; | 2248 | struct neigh_seq_state *state = seq->private; |
2249 | struct net * net = state->p.net; | 2249 | struct net *net = seq_file_net(seq); |
2250 | struct neigh_table *tbl = state->tbl; | 2250 | struct neigh_table *tbl = state->tbl; |
2251 | struct pneigh_entry *pn = NULL; | 2251 | struct pneigh_entry *pn = NULL; |
2252 | int bucket = state->bucket; | 2252 | int bucket = state->bucket; |
@@ -2269,7 +2269,7 @@ static struct pneigh_entry *pneigh_get_next(struct seq_file *seq, | |||
2269 | loff_t *pos) | 2269 | loff_t *pos) |
2270 | { | 2270 | { |
2271 | struct neigh_seq_state *state = seq->private; | 2271 | struct neigh_seq_state *state = seq->private; |
2272 | struct net * net = state->p.net; | 2272 | struct net *net = seq_file_net(seq); |
2273 | struct neigh_table *tbl = state->tbl; | 2273 | struct neigh_table *tbl = state->tbl; |
2274 | 2274 | ||
2275 | pn = pn->next; | 2275 | pn = pn->next; |
diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c index 8d58d85dfac6..02088deb0461 100644 --- a/net/ipv4/fib_hash.c +++ b/net/ipv4/fib_hash.c | |||
@@ -821,7 +821,7 @@ static struct fib_alias *fib_get_first(struct seq_file *seq) | |||
821 | struct fib_table *main_table; | 821 | struct fib_table *main_table; |
822 | struct fn_hash *table; | 822 | struct fn_hash *table; |
823 | 823 | ||
824 | main_table = fib_get_table(iter->p.net, RT_TABLE_MAIN); | 824 | main_table = fib_get_table(seq_file_net(seq), RT_TABLE_MAIN); |
825 | table = (struct fn_hash *)main_table->tb_data; | 825 | table = (struct fn_hash *)main_table->tb_data; |
826 | 826 | ||
827 | iter->bucket = 0; | 827 | iter->bucket = 0; |
@@ -959,11 +959,10 @@ static struct fib_alias *fib_get_idx(struct seq_file *seq, loff_t pos) | |||
959 | static void *fib_seq_start(struct seq_file *seq, loff_t *pos) | 959 | static void *fib_seq_start(struct seq_file *seq, loff_t *pos) |
960 | __acquires(fib_hash_lock) | 960 | __acquires(fib_hash_lock) |
961 | { | 961 | { |
962 | struct fib_iter_state *iter = seq->private; | ||
963 | void *v = NULL; | 962 | void *v = NULL; |
964 | 963 | ||
965 | read_lock(&fib_hash_lock); | 964 | read_lock(&fib_hash_lock); |
966 | if (fib_get_table(iter->p.net, RT_TABLE_MAIN)) | 965 | if (fib_get_table(seq_file_net(seq), RT_TABLE_MAIN)) |
967 | v = *pos ? fib_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; | 966 | v = *pos ? fib_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; |
968 | return v; | 967 | return v; |
969 | } | 968 | } |
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index ce6cb34e28e1..9e491e70e855 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -2279,9 +2279,10 @@ static const struct file_operations fib_triestat_fops = { | |||
2279 | .release = fib_triestat_seq_release, | 2279 | .release = fib_triestat_seq_release, |
2280 | }; | 2280 | }; |
2281 | 2281 | ||
2282 | static struct node *fib_trie_get_idx(struct fib_trie_iter *iter, loff_t pos) | 2282 | static struct node *fib_trie_get_idx(struct seq_file *seq, loff_t pos) |
2283 | { | 2283 | { |
2284 | struct net *net = iter->p.net; | 2284 | struct fib_trie_iter *iter = seq->private; |
2285 | struct net *net = seq_file_net(seq); | ||
2285 | loff_t idx = 0; | 2286 | loff_t idx = 0; |
2286 | unsigned int h; | 2287 | unsigned int h; |
2287 | 2288 | ||
@@ -2309,16 +2310,14 @@ static struct node *fib_trie_get_idx(struct fib_trie_iter *iter, loff_t pos) | |||
2309 | static void *fib_trie_seq_start(struct seq_file *seq, loff_t *pos) | 2310 | static void *fib_trie_seq_start(struct seq_file *seq, loff_t *pos) |
2310 | __acquires(RCU) | 2311 | __acquires(RCU) |
2311 | { | 2312 | { |
2312 | struct fib_trie_iter *iter = seq->private; | ||
2313 | |||
2314 | rcu_read_lock(); | 2313 | rcu_read_lock(); |
2315 | return fib_trie_get_idx(iter, *pos); | 2314 | return fib_trie_get_idx(seq, *pos); |
2316 | } | 2315 | } |
2317 | 2316 | ||
2318 | static void *fib_trie_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 2317 | static void *fib_trie_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
2319 | { | 2318 | { |
2320 | struct fib_trie_iter *iter = seq->private; | 2319 | struct fib_trie_iter *iter = seq->private; |
2321 | struct net *net = iter->p.net; | 2320 | struct net *net = seq_file_net(seq); |
2322 | struct fib_table *tb = iter->tb; | 2321 | struct fib_table *tb = iter->tb; |
2323 | struct hlist_node *tb_node; | 2322 | struct hlist_node *tb_node; |
2324 | unsigned int h; | 2323 | unsigned int h; |
@@ -2513,7 +2512,7 @@ static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos) | |||
2513 | struct fib_table *tb; | 2512 | struct fib_table *tb; |
2514 | 2513 | ||
2515 | rcu_read_lock(); | 2514 | rcu_read_lock(); |
2516 | tb = fib_get_table(iter->p.net, RT_TABLE_MAIN); | 2515 | tb = fib_get_table(seq_file_net(seq), RT_TABLE_MAIN); |
2517 | if (!tb) | 2516 | if (!tb) |
2518 | return NULL; | 2517 | return NULL; |
2519 | 2518 | ||
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index be19a4048d7c..25dc8b38cac3 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -856,7 +856,7 @@ static struct sock *raw_get_first(struct seq_file *seq) | |||
856 | struct hlist_node *node; | 856 | struct hlist_node *node; |
857 | 857 | ||
858 | sk_for_each(sk, node, &state->h->ht[state->bucket]) | 858 | sk_for_each(sk, node, &state->h->ht[state->bucket]) |
859 | if (sock_net(sk) == state->p.net) | 859 | if (sock_net(sk) == seq_file_net(seq)) |
860 | goto found; | 860 | goto found; |
861 | } | 861 | } |
862 | sk = NULL; | 862 | sk = NULL; |
@@ -872,7 +872,7 @@ static struct sock *raw_get_next(struct seq_file *seq, struct sock *sk) | |||
872 | sk = sk_next(sk); | 872 | sk = sk_next(sk); |
873 | try_again: | 873 | try_again: |
874 | ; | 874 | ; |
875 | } while (sk && sock_net(sk) != state->p.net); | 875 | } while (sk && sock_net(sk) != seq_file_net(seq)); |
876 | 876 | ||
877 | if (!sk && ++state->bucket < RAW_HTABLE_SIZE) { | 877 | if (!sk && ++state->bucket < RAW_HTABLE_SIZE) { |
878 | sk = sk_head(&state->h->ht[state->bucket]); | 878 | sk = sk_head(&state->h->ht[state->bucket]); |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 194f5cca3121..eab8d75e5222 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -276,15 +276,16 @@ struct rt_cache_iter_state { | |||
276 | int genid; | 276 | int genid; |
277 | }; | 277 | }; |
278 | 278 | ||
279 | static struct rtable *rt_cache_get_first(struct rt_cache_iter_state *st) | 279 | static struct rtable *rt_cache_get_first(struct seq_file *seq) |
280 | { | 280 | { |
281 | struct rt_cache_iter_state *st = seq->private; | ||
281 | struct rtable *r = NULL; | 282 | struct rtable *r = NULL; |
282 | 283 | ||
283 | for (st->bucket = rt_hash_mask; st->bucket >= 0; --st->bucket) { | 284 | for (st->bucket = rt_hash_mask; st->bucket >= 0; --st->bucket) { |
284 | rcu_read_lock_bh(); | 285 | rcu_read_lock_bh(); |
285 | r = rcu_dereference(rt_hash_table[st->bucket].chain); | 286 | r = rcu_dereference(rt_hash_table[st->bucket].chain); |
286 | while (r) { | 287 | while (r) { |
287 | if (dev_net(r->u.dst.dev) == st->p.net && | 288 | if (dev_net(r->u.dst.dev) == seq_file_net(seq) && |
288 | r->rt_genid == st->genid) | 289 | r->rt_genid == st->genid) |
289 | return r; | 290 | return r; |
290 | r = rcu_dereference(r->u.dst.rt_next); | 291 | r = rcu_dereference(r->u.dst.rt_next); |
@@ -294,9 +295,10 @@ static struct rtable *rt_cache_get_first(struct rt_cache_iter_state *st) | |||
294 | return r; | 295 | return r; |
295 | } | 296 | } |
296 | 297 | ||
297 | static struct rtable *__rt_cache_get_next(struct rt_cache_iter_state *st, | 298 | static struct rtable *__rt_cache_get_next(struct seq_file *seq, |
298 | struct rtable *r) | 299 | struct rtable *r) |
299 | { | 300 | { |
301 | struct rt_cache_iter_state *st = seq->private; | ||
300 | r = r->u.dst.rt_next; | 302 | r = r->u.dst.rt_next; |
301 | while (!r) { | 303 | while (!r) { |
302 | rcu_read_unlock_bh(); | 304 | rcu_read_unlock_bh(); |
@@ -308,11 +310,12 @@ static struct rtable *__rt_cache_get_next(struct rt_cache_iter_state *st, | |||
308 | return rcu_dereference(r); | 310 | return rcu_dereference(r); |
309 | } | 311 | } |
310 | 312 | ||
311 | static struct rtable *rt_cache_get_next(struct rt_cache_iter_state *st, | 313 | static struct rtable *rt_cache_get_next(struct seq_file *seq, |
312 | struct rtable *r) | 314 | struct rtable *r) |
313 | { | 315 | { |
314 | while ((r = __rt_cache_get_next(st, r)) != NULL) { | 316 | struct rt_cache_iter_state *st = seq->private; |
315 | if (dev_net(r->u.dst.dev) != st->p.net) | 317 | while ((r = __rt_cache_get_next(seq, r)) != NULL) { |
318 | if (dev_net(r->u.dst.dev) != seq_file_net(seq)) | ||
316 | continue; | 319 | continue; |
317 | if (r->rt_genid == st->genid) | 320 | if (r->rt_genid == st->genid) |
318 | break; | 321 | break; |
@@ -320,12 +323,12 @@ static struct rtable *rt_cache_get_next(struct rt_cache_iter_state *st, | |||
320 | return r; | 323 | return r; |
321 | } | 324 | } |
322 | 325 | ||
323 | static struct rtable *rt_cache_get_idx(struct rt_cache_iter_state *st, loff_t pos) | 326 | static struct rtable *rt_cache_get_idx(struct seq_file *seq, loff_t pos) |
324 | { | 327 | { |
325 | struct rtable *r = rt_cache_get_first(st); | 328 | struct rtable *r = rt_cache_get_first(seq); |
326 | 329 | ||
327 | if (r) | 330 | if (r) |
328 | while (pos && (r = rt_cache_get_next(st, r))) | 331 | while (pos && (r = rt_cache_get_next(seq, r))) |
329 | --pos; | 332 | --pos; |
330 | return pos ? NULL : r; | 333 | return pos ? NULL : r; |
331 | } | 334 | } |
@@ -333,9 +336,8 @@ static struct rtable *rt_cache_get_idx(struct rt_cache_iter_state *st, loff_t po | |||
333 | static void *rt_cache_seq_start(struct seq_file *seq, loff_t *pos) | 336 | static void *rt_cache_seq_start(struct seq_file *seq, loff_t *pos) |
334 | { | 337 | { |
335 | struct rt_cache_iter_state *st = seq->private; | 338 | struct rt_cache_iter_state *st = seq->private; |
336 | |||
337 | if (*pos) | 339 | if (*pos) |
338 | return rt_cache_get_idx(st, *pos - 1); | 340 | return rt_cache_get_idx(seq, *pos - 1); |
339 | st->genid = atomic_read(&rt_genid); | 341 | st->genid = atomic_read(&rt_genid); |
340 | return SEQ_START_TOKEN; | 342 | return SEQ_START_TOKEN; |
341 | } | 343 | } |
@@ -343,12 +345,11 @@ static void *rt_cache_seq_start(struct seq_file *seq, loff_t *pos) | |||
343 | static void *rt_cache_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 345 | static void *rt_cache_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
344 | { | 346 | { |
345 | struct rtable *r; | 347 | struct rtable *r; |
346 | struct rt_cache_iter_state *st = seq->private; | ||
347 | 348 | ||
348 | if (v == SEQ_START_TOKEN) | 349 | if (v == SEQ_START_TOKEN) |
349 | r = rt_cache_get_first(st); | 350 | r = rt_cache_get_first(seq); |
350 | else | 351 | else |
351 | r = rt_cache_get_next(st, v); | 352 | r = rt_cache_get_next(seq, v); |
352 | ++*pos; | 353 | ++*pos; |
353 | return r; | 354 | return r; |
354 | } | 355 | } |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index f2c90f145cbb..ac5d4f4b6312 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2766,7 +2766,7 @@ static struct inet6_ifaddr *if6_get_first(struct seq_file *seq) | |||
2766 | { | 2766 | { |
2767 | struct inet6_ifaddr *ifa = NULL; | 2767 | struct inet6_ifaddr *ifa = NULL; |
2768 | struct if6_iter_state *state = seq->private; | 2768 | struct if6_iter_state *state = seq->private; |
2769 | struct net *net = state->p.net; | 2769 | struct net *net = seq_file_net(seq); |
2770 | 2770 | ||
2771 | for (state->bucket = 0; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) { | 2771 | for (state->bucket = 0; state->bucket < IN6_ADDR_HSIZE; ++state->bucket) { |
2772 | ifa = inet6_addr_lst[state->bucket]; | 2772 | ifa = inet6_addr_lst[state->bucket]; |
@@ -2782,7 +2782,7 @@ static struct inet6_ifaddr *if6_get_first(struct seq_file *seq) | |||
2782 | static struct inet6_ifaddr *if6_get_next(struct seq_file *seq, struct inet6_ifaddr *ifa) | 2782 | static struct inet6_ifaddr *if6_get_next(struct seq_file *seq, struct inet6_ifaddr *ifa) |
2783 | { | 2783 | { |
2784 | struct if6_iter_state *state = seq->private; | 2784 | struct if6_iter_state *state = seq->private; |
2785 | struct net *net = state->p.net; | 2785 | struct net *net = seq_file_net(seq); |
2786 | 2786 | ||
2787 | ifa = ifa->lst_next; | 2787 | ifa = ifa->lst_next; |
2788 | try_again: | 2788 | try_again: |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 20a3d8e2f6c6..d810cff818cf 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -2355,7 +2355,7 @@ static inline struct ifmcaddr6 *igmp6_mc_get_first(struct seq_file *seq) | |||
2355 | { | 2355 | { |
2356 | struct ifmcaddr6 *im = NULL; | 2356 | struct ifmcaddr6 *im = NULL; |
2357 | struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq); | 2357 | struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq); |
2358 | struct net *net = state->p.net; | 2358 | struct net *net = seq_file_net(seq); |
2359 | 2359 | ||
2360 | state->idev = NULL; | 2360 | state->idev = NULL; |
2361 | for_each_netdev(net, state->dev) { | 2361 | for_each_netdev(net, state->dev) { |
@@ -2486,7 +2486,7 @@ static inline struct ip6_sf_list *igmp6_mcf_get_first(struct seq_file *seq) | |||
2486 | struct ip6_sf_list *psf = NULL; | 2486 | struct ip6_sf_list *psf = NULL; |
2487 | struct ifmcaddr6 *im = NULL; | 2487 | struct ifmcaddr6 *im = NULL; |
2488 | struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq); | 2488 | struct igmp6_mcf_iter_state *state = igmp6_mcf_seq_private(seq); |
2489 | struct net *net = state->p.net; | 2489 | struct net *net = seq_file_net(seq); |
2490 | 2490 | ||
2491 | state->idev = NULL; | 2491 | state->idev = NULL; |
2492 | state->im = NULL; | 2492 | state->im = NULL; |
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index a6792089fcf9..0bd95680a494 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c | |||
@@ -727,7 +727,7 @@ struct xt_names_priv { | |||
727 | static void *xt_table_seq_start(struct seq_file *seq, loff_t *pos) | 727 | static void *xt_table_seq_start(struct seq_file *seq, loff_t *pos) |
728 | { | 728 | { |
729 | struct xt_names_priv *priv = seq->private; | 729 | struct xt_names_priv *priv = seq->private; |
730 | struct net *net = priv->p.net; | 730 | struct net *net = seq_file_net(seq); |
731 | int af = priv->af; | 731 | int af = priv->af; |
732 | 732 | ||
733 | mutex_lock(&xt[af].mutex); | 733 | mutex_lock(&xt[af].mutex); |
@@ -737,7 +737,7 @@ static void *xt_table_seq_start(struct seq_file *seq, loff_t *pos) | |||
737 | static void *xt_table_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 737 | static void *xt_table_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
738 | { | 738 | { |
739 | struct xt_names_priv *priv = seq->private; | 739 | struct xt_names_priv *priv = seq->private; |
740 | struct net *net = priv->p.net; | 740 | struct net *net = seq_file_net(seq); |
741 | int af = priv->af; | 741 | int af = priv->af; |
742 | 742 | ||
743 | return seq_list_next(v, &net->xt.tables[af], pos); | 743 | return seq_list_next(v, &net->xt.tables[af], pos); |
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 712a7bff8560..1d16d95dfaaf 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c | |||
@@ -1758,7 +1758,7 @@ static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos) | |||
1758 | 1758 | ||
1759 | for (j = 0; j <= hash->mask; j++) { | 1759 | for (j = 0; j <= hash->mask; j++) { |
1760 | sk_for_each(s, node, &hash->table[j]) { | 1760 | sk_for_each(s, node, &hash->table[j]) { |
1761 | if (sock_net(s) != iter->p.net) | 1761 | if (sock_net(s) != seq_file_net(seq)) |
1762 | continue; | 1762 | continue; |
1763 | if (off == pos) { | 1763 | if (off == pos) { |
1764 | iter->link = i; | 1764 | iter->link = i; |
@@ -1794,7 +1794,7 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos) | |||
1794 | s = v; | 1794 | s = v; |
1795 | do { | 1795 | do { |
1796 | s = sk_next(s); | 1796 | s = sk_next(s); |
1797 | } while (s && (sock_net(s) != iter->p.net)); | 1797 | } while (s && sock_net(s) != seq_file_net(seq)); |
1798 | if (s) | 1798 | if (s) |
1799 | return s; | 1799 | return s; |
1800 | 1800 | ||
@@ -1806,7 +1806,7 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos) | |||
1806 | 1806 | ||
1807 | for (; j <= hash->mask; j++) { | 1807 | for (; j <= hash->mask; j++) { |
1808 | s = sk_head(&hash->table[j]); | 1808 | s = sk_head(&hash->table[j]); |
1809 | while (s && sock_net(s) != iter->p.net) | 1809 | while (s && sock_net(s) != seq_file_net(seq)) |
1810 | s = sk_next(s); | 1810 | s = sk_next(s); |
1811 | if (s) { | 1811 | if (s) { |
1812 | iter->link = i; | 1812 | iter->link = i; |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index cb9d0cb5f270..4a4793051bcb 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -2016,13 +2016,14 @@ struct unix_iter_state { | |||
2016 | struct seq_net_private p; | 2016 | struct seq_net_private p; |
2017 | int i; | 2017 | int i; |
2018 | }; | 2018 | }; |
2019 | static struct sock *unix_seq_idx(struct unix_iter_state *iter, loff_t pos) | 2019 | static struct sock *unix_seq_idx(struct seq_file *seq, loff_t pos) |
2020 | { | 2020 | { |
2021 | struct unix_iter_state *iter = seq->private; | ||
2021 | loff_t off = 0; | 2022 | loff_t off = 0; |
2022 | struct sock *s; | 2023 | struct sock *s; |
2023 | 2024 | ||
2024 | for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { | 2025 | for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { |
2025 | if (sock_net(s) != iter->p.net) | 2026 | if (sock_net(s) != seq_file_net(seq)) |
2026 | continue; | 2027 | continue; |
2027 | if (off == pos) | 2028 | if (off == pos) |
2028 | return s; | 2029 | return s; |
@@ -2035,9 +2036,8 @@ static struct sock *unix_seq_idx(struct unix_iter_state *iter, loff_t pos) | |||
2035 | static void *unix_seq_start(struct seq_file *seq, loff_t *pos) | 2036 | static void *unix_seq_start(struct seq_file *seq, loff_t *pos) |
2036 | __acquires(unix_table_lock) | 2037 | __acquires(unix_table_lock) |
2037 | { | 2038 | { |
2038 | struct unix_iter_state *iter = seq->private; | ||
2039 | spin_lock(&unix_table_lock); | 2039 | spin_lock(&unix_table_lock); |
2040 | return *pos ? unix_seq_idx(iter, *pos - 1) : ((void *) 1); | 2040 | return *pos ? unix_seq_idx(seq, *pos - 1) : ((void *) 1); |
2041 | } | 2041 | } |
2042 | 2042 | ||
2043 | static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 2043 | static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
@@ -2050,7 +2050,7 @@ static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) | |||
2050 | sk = first_unix_socket(&iter->i); | 2050 | sk = first_unix_socket(&iter->i); |
2051 | else | 2051 | else |
2052 | sk = next_unix_socket(&iter->i, sk); | 2052 | sk = next_unix_socket(&iter->i, sk); |
2053 | while (sk && (sock_net(sk) != iter->p.net)) | 2053 | while (sk && (sock_net(sk) != seq_file_net(seq))) |
2054 | sk = next_unix_socket(&iter->i, sk); | 2054 | sk = next_unix_socket(&iter->i, sk); |
2055 | return sk; | 2055 | return sk; |
2056 | } | 2056 | } |