aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/fib_rules.c1
-rw-r--r--net/ipv4/fib_trie.c1
-rw-r--r--net/ipv4/inet_timewait_sock.c1
-rw-r--r--net/ipv4/ipconfig.c1
-rw-r--r--net/ipv4/ipmr.c1
-rw-r--r--net/ipv4/netfilter.c1
-rw-r--r--net/ipv4/netfilter/ipt_CLUSTERIP.c1
-rw-r--r--net/ipv4/netfilter/ipt_ULOG.c4
-rw-r--r--net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_common.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_icmp.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_sctp.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_tcp.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_udp.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_proto_udplite.c1
-rw-r--r--net/ipv4/netfilter/nf_nat_snmp_basic.c22
-rw-r--r--net/ipv4/ping.c1
-rw-r--r--net/ipv4/proc.c1
-rw-r--r--net/ipv4/raw.c1
-rw-r--r--net/ipv4/syncookies.c1
-rw-r--r--net/ipv4/tcp_ipv4.c23
-rw-r--r--net/ipv4/udp.c30
-rw-r--r--net/ipv4/udplite.c14
-rw-r--r--net/ipv4/xfrm4_state.c1
24 files changed, 62 insertions, 50 deletions
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c
index a53bb1b5b118..46339ba7a2d3 100644
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
@@ -26,6 +26,7 @@
26#include <linux/init.h> 26#include <linux/init.h>
27#include <linux/list.h> 27#include <linux/list.h>
28#include <linux/rcupdate.h> 28#include <linux/rcupdate.h>
29#include <linux/export.h>
29#include <net/ip.h> 30#include <net/ip.h>
30#include <net/route.h> 31#include <net/route.h>
31#include <net/tcp.h> 32#include <net/tcp.h>
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 89d6f71a6a99..37b671185c81 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -73,6 +73,7 @@
73#include <linux/list.h> 73#include <linux/list.h>
74#include <linux/slab.h> 74#include <linux/slab.h>
75#include <linux/prefetch.h> 75#include <linux/prefetch.h>
76#include <linux/export.h>
76#include <net/net_namespace.h> 77#include <net/net_namespace.h>
77#include <net/ip.h> 78#include <net/ip.h>
78#include <net/protocol.h> 79#include <net/protocol.h>
diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c
index 44d65d546e30..89168c6351ff 100644
--- a/net/ipv4/inet_timewait_sock.c
+++ b/net/ipv4/inet_timewait_sock.c
@@ -11,6 +11,7 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/kmemcheck.h> 12#include <linux/kmemcheck.h>
13#include <linux/slab.h> 13#include <linux/slab.h>
14#include <linux/module.h>
14#include <net/inet_hashtables.h> 15#include <net/inet_hashtables.h>
15#include <net/inet_timewait_sock.h> 16#include <net/inet_timewait_sock.h>
16#include <net/ip.h> 17#include <net/ip.h>
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 472a8c4f1dc0..0da2afc97f32 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -54,6 +54,7 @@
54#include <linux/delay.h> 54#include <linux/delay.h>
55#include <linux/nfs_fs.h> 55#include <linux/nfs_fs.h>
56#include <linux/slab.h> 56#include <linux/slab.h>
57#include <linux/export.h>
57#include <net/net_namespace.h> 58#include <net/net_namespace.h>
58#include <net/arp.h> 59#include <net/arp.h>
59#include <net/ip.h> 60#include <net/ip.h>
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 6164e982e0ef..76a7f07b38b6 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -61,6 +61,7 @@
61#include <linux/if_arp.h> 61#include <linux/if_arp.h>
62#include <linux/netfilter_ipv4.h> 62#include <linux/netfilter_ipv4.h>
63#include <linux/compat.h> 63#include <linux/compat.h>
64#include <linux/export.h>
64#include <net/ipip.h> 65#include <net/ipip.h>
65#include <net/checksum.h> 66#include <net/checksum.h>
66#include <net/netlink.h> 67#include <net/netlink.h>
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c
index 929b27bdeb79..9899619ab9b8 100644
--- a/net/ipv4/netfilter.c
+++ b/net/ipv4/netfilter.c
@@ -5,6 +5,7 @@
5#include <linux/ip.h> 5#include <linux/ip.h>
6#include <linux/skbuff.h> 6#include <linux/skbuff.h>
7#include <linux/gfp.h> 7#include <linux/gfp.h>
8#include <linux/export.h>
8#include <net/route.h> 9#include <net/route.h>
9#include <net/xfrm.h> 10#include <net/xfrm.h>
10#include <net/ip.h> 11#include <net/ip.h>
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index db8d22db425f..a639967eb727 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -395,7 +395,6 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
395 config = clusterip_config_init(cipinfo, 395 config = clusterip_config_init(cipinfo,
396 e->ip.dst.s_addr, dev); 396 e->ip.dst.s_addr, dev);
397 if (!config) { 397 if (!config) {
398 pr_info("cannot allocate config\n");
399 dev_put(dev); 398 dev_put(dev);
400 return -ENOMEM; 399 return -ENOMEM;
401 } 400 }
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c
index 446e0f467a17..b5508151e547 100644
--- a/net/ipv4/netfilter/ipt_ULOG.c
+++ b/net/ipv4/netfilter/ipt_ULOG.c
@@ -135,10 +135,8 @@ static struct sk_buff *ulog_alloc_skb(unsigned int size)
135 * due to slab allocator restrictions */ 135 * due to slab allocator restrictions */
136 136
137 n = max(size, nlbufsiz); 137 n = max(size, nlbufsiz);
138 skb = alloc_skb(n, GFP_ATOMIC); 138 skb = alloc_skb(n, GFP_ATOMIC | __GFP_NOWARN);
139 if (!skb) { 139 if (!skb) {
140 pr_debug("cannot alloc whole buffer %ub!\n", n);
141
142 if (n > size) { 140 if (n > size) {
143 /* try to allocate only as much as we need for 141 /* try to allocate only as much as we need for
144 * current packet */ 142 * current packet */
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c
index 5585980fce2e..9682b36df38c 100644
--- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c
+++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c
@@ -21,6 +21,7 @@
21#include <net/netfilter/nf_conntrack_expect.h> 21#include <net/netfilter/nf_conntrack_expect.h>
22#include <net/netfilter/nf_conntrack_acct.h> 22#include <net/netfilter/nf_conntrack_acct.h>
23#include <linux/rculist_nulls.h> 23#include <linux/rculist_nulls.h>
24#include <linux/export.h>
24 25
25struct ct_iter_state { 26struct ct_iter_state {
26 struct seq_net_private p; 27 struct seq_net_private p;
diff --git a/net/ipv4/netfilter/nf_nat_proto_common.c b/net/ipv4/netfilter/nf_nat_proto_common.c
index f52d41ea0690..a3d997618602 100644
--- a/net/ipv4/netfilter/nf_nat_proto_common.c
+++ b/net/ipv4/netfilter/nf_nat_proto_common.c
@@ -12,6 +12,7 @@
12#include <linux/ip.h> 12#include <linux/ip.h>
13 13
14#include <linux/netfilter.h> 14#include <linux/netfilter.h>
15#include <linux/export.h>
15#include <net/secure_seq.h> 16#include <net/secure_seq.h>
16#include <net/netfilter/nf_nat.h> 17#include <net/netfilter/nf_nat.h>
17#include <net/netfilter/nf_nat_core.h> 18#include <net/netfilter/nf_nat_core.h>
diff --git a/net/ipv4/netfilter/nf_nat_proto_icmp.c b/net/ipv4/netfilter/nf_nat_proto_icmp.c
index 5744c3ec847c..9f4dc1235dc7 100644
--- a/net/ipv4/netfilter/nf_nat_proto_icmp.c
+++ b/net/ipv4/netfilter/nf_nat_proto_icmp.c
@@ -8,6 +8,7 @@
8 8
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/export.h>
11#include <linux/ip.h> 12#include <linux/ip.h>
12#include <linux/icmp.h> 13#include <linux/icmp.h>
13 14
diff --git a/net/ipv4/netfilter/nf_nat_proto_sctp.c b/net/ipv4/netfilter/nf_nat_proto_sctp.c
index 756331d42661..bd5a80a62a5b 100644
--- a/net/ipv4/netfilter/nf_nat_proto_sctp.c
+++ b/net/ipv4/netfilter/nf_nat_proto_sctp.c
@@ -10,6 +10,7 @@
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/ip.h> 11#include <linux/ip.h>
12#include <linux/sctp.h> 12#include <linux/sctp.h>
13#include <linux/module.h>
13#include <net/sctp/checksum.h> 14#include <net/sctp/checksum.h>
14 15
15#include <net/netfilter/nf_nat_protocol.h> 16#include <net/netfilter/nf_nat_protocol.h>
diff --git a/net/ipv4/netfilter/nf_nat_proto_tcp.c b/net/ipv4/netfilter/nf_nat_proto_tcp.c
index aa460a595d5d..0d67bb80130f 100644
--- a/net/ipv4/netfilter/nf_nat_proto_tcp.c
+++ b/net/ipv4/netfilter/nf_nat_proto_tcp.c
@@ -8,6 +8,7 @@
8 8
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/export.h>
11#include <linux/ip.h> 12#include <linux/ip.h>
12#include <linux/tcp.h> 13#include <linux/tcp.h>
13 14
diff --git a/net/ipv4/netfilter/nf_nat_proto_udp.c b/net/ipv4/netfilter/nf_nat_proto_udp.c
index dfe65c7e2925..0b1b8601cba7 100644
--- a/net/ipv4/netfilter/nf_nat_proto_udp.c
+++ b/net/ipv4/netfilter/nf_nat_proto_udp.c
@@ -7,6 +7,7 @@
7 */ 7 */
8 8
9#include <linux/types.h> 9#include <linux/types.h>
10#include <linux/export.h>
10#include <linux/init.h> 11#include <linux/init.h>
11#include <linux/ip.h> 12#include <linux/ip.h>
12#include <linux/udp.h> 13#include <linux/udp.h>
diff --git a/net/ipv4/netfilter/nf_nat_proto_udplite.c b/net/ipv4/netfilter/nf_nat_proto_udplite.c
index 3cc8c8af39ef..f83ef23e2ab7 100644
--- a/net/ipv4/netfilter/nf_nat_proto_udplite.c
+++ b/net/ipv4/netfilter/nf_nat_proto_udplite.c
@@ -13,6 +13,7 @@
13#include <linux/udp.h> 13#include <linux/udp.h>
14 14
15#include <linux/netfilter.h> 15#include <linux/netfilter.h>
16#include <linux/module.h>
16#include <net/netfilter/nf_nat.h> 17#include <net/netfilter/nf_nat.h>
17#include <net/netfilter/nf_nat_protocol.h> 18#include <net/netfilter/nf_nat_protocol.h>
18 19
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c
index d1cb412c18e0..2133c30a4a5f 100644
--- a/net/ipv4/netfilter/nf_nat_snmp_basic.c
+++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c
@@ -400,11 +400,8 @@ static unsigned char asn1_octets_decode(struct asn1_ctx *ctx,
400 *len = 0; 400 *len = 0;
401 401
402 *octets = kmalloc(eoc - ctx->pointer, GFP_ATOMIC); 402 *octets = kmalloc(eoc - ctx->pointer, GFP_ATOMIC);
403 if (*octets == NULL) { 403 if (*octets == NULL)
404 if (net_ratelimit())
405 pr_notice("OOM in bsalg (%d)\n", __LINE__);
406 return 0; 404 return 0;
407 }
408 405
409 ptr = *octets; 406 ptr = *octets;
410 while (ctx->pointer < eoc) { 407 while (ctx->pointer < eoc) {
@@ -451,11 +448,8 @@ static unsigned char asn1_oid_decode(struct asn1_ctx *ctx,
451 return 0; 448 return 0;
452 449
453 *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC); 450 *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC);
454 if (*oid == NULL) { 451 if (*oid == NULL)
455 if (net_ratelimit())
456 pr_notice("OOM in bsalg (%d)\n", __LINE__);
457 return 0; 452 return 0;
458 }
459 453
460 optr = *oid; 454 optr = *oid;
461 455
@@ -728,8 +722,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
728 *obj = kmalloc(sizeof(struct snmp_object) + len, GFP_ATOMIC); 722 *obj = kmalloc(sizeof(struct snmp_object) + len, GFP_ATOMIC);
729 if (*obj == NULL) { 723 if (*obj == NULL) {
730 kfree(id); 724 kfree(id);
731 if (net_ratelimit())
732 pr_notice("OOM in bsalg (%d)\n", __LINE__);
733 return 0; 725 return 0;
734 } 726 }
735 (*obj)->syntax.l[0] = l; 727 (*obj)->syntax.l[0] = l;
@@ -744,8 +736,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
744 if (*obj == NULL) { 736 if (*obj == NULL) {
745 kfree(p); 737 kfree(p);
746 kfree(id); 738 kfree(id);
747 if (net_ratelimit())
748 pr_notice("OOM in bsalg (%d)\n", __LINE__);
749 return 0; 739 return 0;
750 } 740 }
751 memcpy((*obj)->syntax.c, p, len); 741 memcpy((*obj)->syntax.c, p, len);
@@ -759,8 +749,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
759 *obj = kmalloc(sizeof(struct snmp_object), GFP_ATOMIC); 749 *obj = kmalloc(sizeof(struct snmp_object), GFP_ATOMIC);
760 if (*obj == NULL) { 750 if (*obj == NULL) {
761 kfree(id); 751 kfree(id);
762 if (net_ratelimit())
763 pr_notice("OOM in bsalg (%d)\n", __LINE__);
764 return 0; 752 return 0;
765 } 753 }
766 if (!asn1_null_decode(ctx, end)) { 754 if (!asn1_null_decode(ctx, end)) {
@@ -780,8 +768,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
780 if (*obj == NULL) { 768 if (*obj == NULL) {
781 kfree(lp); 769 kfree(lp);
782 kfree(id); 770 kfree(id);
783 if (net_ratelimit())
784 pr_notice("OOM in bsalg (%d)\n", __LINE__);
785 return 0; 771 return 0;
786 } 772 }
787 memcpy((*obj)->syntax.ul, lp, len); 773 memcpy((*obj)->syntax.ul, lp, len);
@@ -801,8 +787,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
801 if (*obj == NULL) { 787 if (*obj == NULL) {
802 kfree(p); 788 kfree(p);
803 kfree(id); 789 kfree(id);
804 if (net_ratelimit())
805 pr_notice("OOM in bsalg (%d)\n", __LINE__);
806 return 0; 790 return 0;
807 } 791 }
808 memcpy((*obj)->syntax.uc, p, len); 792 memcpy((*obj)->syntax.uc, p, len);
@@ -819,8 +803,6 @@ static unsigned char snmp_object_decode(struct asn1_ctx *ctx,
819 *obj = kmalloc(sizeof(struct snmp_object) + len, GFP_ATOMIC); 803 *obj = kmalloc(sizeof(struct snmp_object) + len, GFP_ATOMIC);
820 if (*obj == NULL) { 804 if (*obj == NULL) {
821 kfree(id); 805 kfree(id);
822 if (net_ratelimit())
823 pr_notice("OOM in bsalg (%d)\n", __LINE__);
824 return 0; 806 return 0;
825 } 807 }
826 (*obj)->syntax.ul[0] = ul; 808 (*obj)->syntax.ul[0] = ul;
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index 39b403f854c6..a06f73fdb3c0 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -39,6 +39,7 @@
39#include <net/protocol.h> 39#include <net/protocol.h>
40#include <linux/skbuff.h> 40#include <linux/skbuff.h>
41#include <linux/proc_fs.h> 41#include <linux/proc_fs.h>
42#include <linux/export.h>
42#include <net/sock.h> 43#include <net/sock.h>
43#include <net/ping.h> 44#include <net/ping.h>
44#include <net/udp.h> 45#include <net/udp.h>
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index 4bfad5da94f4..466ea8bb7a4d 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -42,6 +42,7 @@
42#include <linux/inetdevice.h> 42#include <linux/inetdevice.h>
43#include <linux/proc_fs.h> 43#include <linux/proc_fs.h>
44#include <linux/seq_file.h> 44#include <linux/seq_file.h>
45#include <linux/export.h>
45#include <net/sock.h> 46#include <net/sock.h>
46#include <net/raw.h> 47#include <net/raw.h>
47 48
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 61714bd52925..007e2eb769d3 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -48,6 +48,7 @@
48#include <linux/errno.h> 48#include <linux/errno.h>
49#include <linux/aio.h> 49#include <linux/aio.h>
50#include <linux/kernel.h> 50#include <linux/kernel.h>
51#include <linux/export.h>
51#include <linux/spinlock.h> 52#include <linux/spinlock.h>
52#include <linux/sockios.h> 53#include <linux/sockios.h>
53#include <linux/socket.h> 54#include <linux/socket.h>
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index d7b89b12f6d8..90f6544c13e2 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -15,6 +15,7 @@
15#include <linux/random.h> 15#include <linux/random.h>
16#include <linux/cryptohash.h> 16#include <linux/cryptohash.h>
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/export.h>
18#include <net/tcp.h> 19#include <net/tcp.h>
19#include <net/route.h> 20#include <net/route.h>
20 21
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 0ea10eefa60f..a7443159c400 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1510,6 +1510,7 @@ exit:
1510 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); 1510 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
1511 return NULL; 1511 return NULL;
1512put_and_exit: 1512put_and_exit:
1513 bh_unlock_sock(newsk);
1513 sock_put(newsk); 1514 sock_put(newsk);
1514 goto exit; 1515 goto exit;
1515} 1516}
@@ -2339,7 +2340,7 @@ static void tcp_seq_stop(struct seq_file *seq, void *v)
2339 } 2340 }
2340} 2341}
2341 2342
2342static int tcp_seq_open(struct inode *inode, struct file *file) 2343int tcp_seq_open(struct inode *inode, struct file *file)
2343{ 2344{
2344 struct tcp_seq_afinfo *afinfo = PDE(inode)->data; 2345 struct tcp_seq_afinfo *afinfo = PDE(inode)->data;
2345 struct tcp_iter_state *s; 2346 struct tcp_iter_state *s;
@@ -2355,23 +2356,19 @@ static int tcp_seq_open(struct inode *inode, struct file *file)
2355 s->last_pos = 0; 2356 s->last_pos = 0;
2356 return 0; 2357 return 0;
2357} 2358}
2359EXPORT_SYMBOL(tcp_seq_open);
2358 2360
2359int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo) 2361int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
2360{ 2362{
2361 int rc = 0; 2363 int rc = 0;
2362 struct proc_dir_entry *p; 2364 struct proc_dir_entry *p;
2363 2365
2364 afinfo->seq_fops.open = tcp_seq_open;
2365 afinfo->seq_fops.read = seq_read;
2366 afinfo->seq_fops.llseek = seq_lseek;
2367 afinfo->seq_fops.release = seq_release_net;
2368
2369 afinfo->seq_ops.start = tcp_seq_start; 2366 afinfo->seq_ops.start = tcp_seq_start;
2370 afinfo->seq_ops.next = tcp_seq_next; 2367 afinfo->seq_ops.next = tcp_seq_next;
2371 afinfo->seq_ops.stop = tcp_seq_stop; 2368 afinfo->seq_ops.stop = tcp_seq_stop;
2372 2369
2373 p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net, 2370 p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net,
2374 &afinfo->seq_fops, afinfo); 2371 afinfo->seq_fops, afinfo);
2375 if (!p) 2372 if (!p)
2376 rc = -ENOMEM; 2373 rc = -ENOMEM;
2377 return rc; 2374 return rc;
@@ -2520,12 +2517,18 @@ out:
2520 return 0; 2517 return 0;
2521} 2518}
2522 2519
2520static const struct file_operations tcp_afinfo_seq_fops = {
2521 .owner = THIS_MODULE,
2522 .open = tcp_seq_open,
2523 .read = seq_read,
2524 .llseek = seq_lseek,
2525 .release = seq_release_net
2526};
2527
2523static struct tcp_seq_afinfo tcp4_seq_afinfo = { 2528static struct tcp_seq_afinfo tcp4_seq_afinfo = {
2524 .name = "tcp", 2529 .name = "tcp",
2525 .family = AF_INET, 2530 .family = AF_INET,
2526 .seq_fops = { 2531 .seq_fops = &tcp_afinfo_seq_fops,
2527 .owner = THIS_MODULE,
2528 },
2529 .seq_ops = { 2532 .seq_ops = {
2530 .show = tcp4_seq_show, 2533 .show = tcp4_seq_show,
2531 }, 2534 },
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index ebaa96bd3464..ab0966df1e2a 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1397,6 +1397,8 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
1397 nf_reset(skb); 1397 nf_reset(skb);
1398 1398
1399 if (up->encap_type) { 1399 if (up->encap_type) {
1400 int (*encap_rcv)(struct sock *sk, struct sk_buff *skb);
1401
1400 /* 1402 /*
1401 * This is an encapsulation socket so pass the skb to 1403 * This is an encapsulation socket so pass the skb to
1402 * the socket's udp_encap_rcv() hook. Otherwise, just 1404 * the socket's udp_encap_rcv() hook. Otherwise, just
@@ -1409,11 +1411,11 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
1409 */ 1411 */
1410 1412
1411 /* if we're overly short, let UDP handle it */ 1413 /* if we're overly short, let UDP handle it */
1412 if (skb->len > sizeof(struct udphdr) && 1414 encap_rcv = ACCESS_ONCE(up->encap_rcv);
1413 up->encap_rcv != NULL) { 1415 if (skb->len > sizeof(struct udphdr) && encap_rcv != NULL) {
1414 int ret; 1416 int ret;
1415 1417
1416 ret = (*up->encap_rcv)(sk, skb); 1418 ret = encap_rcv(sk, skb);
1417 if (ret <= 0) { 1419 if (ret <= 0) {
1418 UDP_INC_STATS_BH(sock_net(sk), 1420 UDP_INC_STATS_BH(sock_net(sk),
1419 UDP_MIB_INDATAGRAMS, 1421 UDP_MIB_INDATAGRAMS,
@@ -2037,7 +2039,7 @@ static void udp_seq_stop(struct seq_file *seq, void *v)
2037 spin_unlock_bh(&state->udp_table->hash[state->bucket].lock); 2039 spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
2038} 2040}
2039 2041
2040static int udp_seq_open(struct inode *inode, struct file *file) 2042int udp_seq_open(struct inode *inode, struct file *file)
2041{ 2043{
2042 struct udp_seq_afinfo *afinfo = PDE(inode)->data; 2044 struct udp_seq_afinfo *afinfo = PDE(inode)->data;
2043 struct udp_iter_state *s; 2045 struct udp_iter_state *s;
@@ -2053,6 +2055,7 @@ static int udp_seq_open(struct inode *inode, struct file *file)
2053 s->udp_table = afinfo->udp_table; 2055 s->udp_table = afinfo->udp_table;
2054 return err; 2056 return err;
2055} 2057}
2058EXPORT_SYMBOL(udp_seq_open);
2056 2059
2057/* ------------------------------------------------------------------------ */ 2060/* ------------------------------------------------------------------------ */
2058int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo) 2061int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
@@ -2060,17 +2063,12 @@ int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
2060 struct proc_dir_entry *p; 2063 struct proc_dir_entry *p;
2061 int rc = 0; 2064 int rc = 0;
2062 2065
2063 afinfo->seq_fops.open = udp_seq_open;
2064 afinfo->seq_fops.read = seq_read;
2065 afinfo->seq_fops.llseek = seq_lseek;
2066 afinfo->seq_fops.release = seq_release_net;
2067
2068 afinfo->seq_ops.start = udp_seq_start; 2066 afinfo->seq_ops.start = udp_seq_start;
2069 afinfo->seq_ops.next = udp_seq_next; 2067 afinfo->seq_ops.next = udp_seq_next;
2070 afinfo->seq_ops.stop = udp_seq_stop; 2068 afinfo->seq_ops.stop = udp_seq_stop;
2071 2069
2072 p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net, 2070 p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net,
2073 &afinfo->seq_fops, afinfo); 2071 afinfo->seq_fops, afinfo);
2074 if (!p) 2072 if (!p)
2075 rc = -ENOMEM; 2073 rc = -ENOMEM;
2076 return rc; 2074 return rc;
@@ -2120,14 +2118,20 @@ int udp4_seq_show(struct seq_file *seq, void *v)
2120 return 0; 2118 return 0;
2121} 2119}
2122 2120
2121static const struct file_operations udp_afinfo_seq_fops = {
2122 .owner = THIS_MODULE,
2123 .open = udp_seq_open,
2124 .read = seq_read,
2125 .llseek = seq_lseek,
2126 .release = seq_release_net
2127};
2128
2123/* ------------------------------------------------------------------------ */ 2129/* ------------------------------------------------------------------------ */
2124static struct udp_seq_afinfo udp4_seq_afinfo = { 2130static struct udp_seq_afinfo udp4_seq_afinfo = {
2125 .name = "udp", 2131 .name = "udp",
2126 .family = AF_INET, 2132 .family = AF_INET,
2127 .udp_table = &udp_table, 2133 .udp_table = &udp_table,
2128 .seq_fops = { 2134 .seq_fops = &udp_afinfo_seq_fops,
2129 .owner = THIS_MODULE,
2130 },
2131 .seq_ops = { 2135 .seq_ops = {
2132 .show = udp4_seq_show, 2136 .show = udp4_seq_show,
2133 }, 2137 },
diff --git a/net/ipv4/udplite.c b/net/ipv4/udplite.c
index aee9963f7f5a..12e9499a1a6c 100644
--- a/net/ipv4/udplite.c
+++ b/net/ipv4/udplite.c
@@ -10,6 +10,7 @@
10 * as published by the Free Software Foundation; either version 10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version. 11 * 2 of the License, or (at your option) any later version.
12 */ 12 */
13#include <linux/export.h>
13#include "udp_impl.h" 14#include "udp_impl.h"
14 15
15struct udp_table udplite_table __read_mostly; 16struct udp_table udplite_table __read_mostly;
@@ -71,13 +72,20 @@ static struct inet_protosw udplite4_protosw = {
71}; 72};
72 73
73#ifdef CONFIG_PROC_FS 74#ifdef CONFIG_PROC_FS
75
76static const struct file_operations udplite_afinfo_seq_fops = {
77 .owner = THIS_MODULE,
78 .open = udp_seq_open,
79 .read = seq_read,
80 .llseek = seq_lseek,
81 .release = seq_release_net
82};
83
74static struct udp_seq_afinfo udplite4_seq_afinfo = { 84static struct udp_seq_afinfo udplite4_seq_afinfo = {
75 .name = "udplite", 85 .name = "udplite",
76 .family = AF_INET, 86 .family = AF_INET,
77 .udp_table = &udplite_table, 87 .udp_table = &udplite_table,
78 .seq_fops = { 88 .seq_fops = &udplite_afinfo_seq_fops,
79 .owner = THIS_MODULE,
80 },
81 .seq_ops = { 89 .seq_ops = {
82 .show = udp4_seq_show, 90 .show = udp4_seq_show,
83 }, 91 },
diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c
index d9ac0a0058b5..9258e751baba 100644
--- a/net/ipv4/xfrm4_state.c
+++ b/net/ipv4/xfrm4_state.c
@@ -12,6 +12,7 @@
12#include <linux/pfkeyv2.h> 12#include <linux/pfkeyv2.h>
13#include <linux/ipsec.h> 13#include <linux/ipsec.h>
14#include <linux/netfilter_ipv4.h> 14#include <linux/netfilter_ipv4.h>
15#include <linux/export.h>
15 16
16static int xfrm4_init_flags(struct xfrm_state *x) 17static int xfrm4_init_flags(struct xfrm_state *x)
17{ 18{