diff options
author | David S. Miller <davem@davemloft.net> | 2013-04-19 17:55:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-19 17:55:29 -0400 |
commit | 95a06161e6b903ad5b96285cb57c8df3b7c8ad34 (patch) | |
tree | 38aceebbb625e4b5186d8c8afe85f9c73ccd6478 /net/ipv4 | |
parent | bb5b052f751b309b5181686741c724a66c5cb15a (diff) | |
parent | d37d696804a83479f240b397670a07ccb53a7417 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says:
====================
The following patchset contains a small batch of Netfilter
updates for your net-next tree, they are:
* Three patches that provide more accurate error reporting to
user-space, instead of -EPERM, in IPv4/IPv6 netfilter re-routing
code and NAT, from Patrick McHardy.
* Update copyright statements in Netfilter filters of
Patrick McHardy, from himself.
* Add Kconfig dependency on the raw/mangle tables to the
rpfilter, from Florian Westphal.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/netfilter.c | 15 | ||||
-rw-r--r-- | net/ipv4/netfilter/Kconfig | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/arp_tables.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_tables.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/ipt_ULOG.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/iptable_mangle.c | 9 | ||||
-rw-r--r-- | net/ipv4/netfilter/iptable_nat.c | 23 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_conntrack_proto_icmp.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_h323.c | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_pptp.c | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_proto_gre.c | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_snmp_basic.c | 2 |
14 files changed, 45 insertions, 17 deletions
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c index 4c0cf63dd92e..c3e0adea9c27 100644 --- a/net/ipv4/netfilter.c +++ b/net/ipv4/netfilter.c | |||
@@ -1,4 +1,9 @@ | |||
1 | /* IPv4 specific functions of netfilter core */ | 1 | /* |
2 | * IPv4 specific functions of netfilter core | ||
3 | * | ||
4 | * Rusty Russell (C) 2000 -- This code is GPL. | ||
5 | * Patrick McHardy (C) 2006-2012 | ||
6 | */ | ||
2 | #include <linux/kernel.h> | 7 | #include <linux/kernel.h> |
3 | #include <linux/netfilter.h> | 8 | #include <linux/netfilter.h> |
4 | #include <linux/netfilter_ipv4.h> | 9 | #include <linux/netfilter_ipv4.h> |
@@ -40,14 +45,14 @@ int ip_route_me_harder(struct sk_buff *skb, unsigned int addr_type) | |||
40 | fl4.flowi4_flags = flags; | 45 | fl4.flowi4_flags = flags; |
41 | rt = ip_route_output_key(net, &fl4); | 46 | rt = ip_route_output_key(net, &fl4); |
42 | if (IS_ERR(rt)) | 47 | if (IS_ERR(rt)) |
43 | return -1; | 48 | return PTR_ERR(rt); |
44 | 49 | ||
45 | /* Drop old route. */ | 50 | /* Drop old route. */ |
46 | skb_dst_drop(skb); | 51 | skb_dst_drop(skb); |
47 | skb_dst_set(skb, &rt->dst); | 52 | skb_dst_set(skb, &rt->dst); |
48 | 53 | ||
49 | if (skb_dst(skb)->error) | 54 | if (skb_dst(skb)->error) |
50 | return -1; | 55 | return skb_dst(skb)->error; |
51 | 56 | ||
52 | #ifdef CONFIG_XFRM | 57 | #ifdef CONFIG_XFRM |
53 | if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && | 58 | if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && |
@@ -56,7 +61,7 @@ int ip_route_me_harder(struct sk_buff *skb, unsigned int addr_type) | |||
56 | skb_dst_set(skb, NULL); | 61 | skb_dst_set(skb, NULL); |
57 | dst = xfrm_lookup(net, dst, flowi4_to_flowi(&fl4), skb->sk, 0); | 62 | dst = xfrm_lookup(net, dst, flowi4_to_flowi(&fl4), skb->sk, 0); |
58 | if (IS_ERR(dst)) | 63 | if (IS_ERR(dst)) |
59 | return -1; | 64 | return PTR_ERR(dst);; |
60 | skb_dst_set(skb, dst); | 65 | skb_dst_set(skb, dst); |
61 | } | 66 | } |
62 | #endif | 67 | #endif |
@@ -66,7 +71,7 @@ int ip_route_me_harder(struct sk_buff *skb, unsigned int addr_type) | |||
66 | if (skb_headroom(skb) < hh_len && | 71 | if (skb_headroom(skb) < hh_len && |
67 | pskb_expand_head(skb, HH_DATA_ALIGN(hh_len - skb_headroom(skb)), | 72 | pskb_expand_head(skb, HH_DATA_ALIGN(hh_len - skb_headroom(skb)), |
68 | 0, GFP_ATOMIC)) | 73 | 0, GFP_ATOMIC)) |
69 | return -1; | 74 | return -ENOMEM; |
70 | 75 | ||
71 | return 0; | 76 | return 0; |
72 | } | 77 | } |
diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig index 0d755c50994b..e7916c193932 100644 --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig | |||
@@ -71,7 +71,7 @@ config IP_NF_MATCH_ECN | |||
71 | 71 | ||
72 | config IP_NF_MATCH_RPFILTER | 72 | config IP_NF_MATCH_RPFILTER |
73 | tristate '"rpfilter" reverse path filter match support' | 73 | tristate '"rpfilter" reverse path filter match support' |
74 | depends on NETFILTER_ADVANCED | 74 | depends on NETFILTER_ADVANCED && (IP_NF_MANGLE || IP_NF_RAW) |
75 | ---help--- | 75 | ---help--- |
76 | This option allows you to match packets whose replies would | 76 | This option allows you to match packets whose replies would |
77 | go out via the interface the packet came in. | 77 | go out via the interface the packet came in. |
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index 7dc6a9743592..85a4f21aac1a 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c | |||
@@ -6,6 +6,7 @@ | |||
6 | * Some ARP specific bits are: | 6 | * Some ARP specific bits are: |
7 | * | 7 | * |
8 | * Copyright (C) 2002 David S. Miller (davem@redhat.com) | 8 | * Copyright (C) 2002 David S. Miller (davem@redhat.com) |
9 | * Copyright (C) 2006-2009 Patrick McHardy <kaber@trash.net> | ||
9 | * | 10 | * |
10 | */ | 11 | */ |
11 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | 12 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index e391db1f056d..d23118d95ff9 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling | 4 | * Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling |
5 | * Copyright (C) 2000-2005 Netfilter Core Team <coreteam@netfilter.org> | 5 | * Copyright (C) 2000-2005 Netfilter Core Team <coreteam@netfilter.org> |
6 | * Copyright (C) 2006-2010 Patrick McHardy <kaber@trash.net> | ||
6 | * | 7 | * |
7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index 8799c836ccaa..f8a222cb6448 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * (C) 2000-2004 by Harald Welte <laforge@netfilter.org> | 4 | * (C) 2000-2004 by Harald Welte <laforge@netfilter.org> |
5 | * (C) 1999-2001 Paul `Rusty' Russell | 5 | * (C) 1999-2001 Paul `Rusty' Russell |
6 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> | 6 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> |
7 | * (C) 2005-2007 Patrick McHardy <kaber@trash.net> | ||
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c index 85d88f206447..cba5658ec82c 100644 --- a/net/ipv4/netfilter/iptable_mangle.c +++ b/net/ipv4/netfilter/iptable_mangle.c | |||
@@ -44,6 +44,7 @@ ipt_mangle_out(struct sk_buff *skb, const struct net_device *out) | |||
44 | u_int8_t tos; | 44 | u_int8_t tos; |
45 | __be32 saddr, daddr; | 45 | __be32 saddr, daddr; |
46 | u_int32_t mark; | 46 | u_int32_t mark; |
47 | int err; | ||
47 | 48 | ||
48 | /* root is playing with raw sockets. */ | 49 | /* root is playing with raw sockets. */ |
49 | if (skb->len < sizeof(struct iphdr) || | 50 | if (skb->len < sizeof(struct iphdr) || |
@@ -66,9 +67,11 @@ ipt_mangle_out(struct sk_buff *skb, const struct net_device *out) | |||
66 | if (iph->saddr != saddr || | 67 | if (iph->saddr != saddr || |
67 | iph->daddr != daddr || | 68 | iph->daddr != daddr || |
68 | skb->mark != mark || | 69 | skb->mark != mark || |
69 | iph->tos != tos) | 70 | iph->tos != tos) { |
70 | if (ip_route_me_harder(skb, RTN_UNSPEC)) | 71 | err = ip_route_me_harder(skb, RTN_UNSPEC); |
71 | ret = NF_DROP; | 72 | if (err < 0) |
73 | ret = NF_DROP_ERR(err); | ||
74 | } | ||
72 | } | 75 | } |
73 | 76 | ||
74 | return ret; | 77 | return ret; |
diff --git a/net/ipv4/netfilter/iptable_nat.c b/net/ipv4/netfilter/iptable_nat.c index eeaff7e4acb5..6383273d54e1 100644 --- a/net/ipv4/netfilter/iptable_nat.c +++ b/net/ipv4/netfilter/iptable_nat.c | |||
@@ -176,6 +176,7 @@ nf_nat_ipv4_out(unsigned int hooknum, | |||
176 | #ifdef CONFIG_XFRM | 176 | #ifdef CONFIG_XFRM |
177 | const struct nf_conn *ct; | 177 | const struct nf_conn *ct; |
178 | enum ip_conntrack_info ctinfo; | 178 | enum ip_conntrack_info ctinfo; |
179 | int err; | ||
179 | #endif | 180 | #endif |
180 | unsigned int ret; | 181 | unsigned int ret; |
181 | 182 | ||
@@ -195,9 +196,11 @@ nf_nat_ipv4_out(unsigned int hooknum, | |||
195 | ct->tuplehash[!dir].tuple.dst.u3.ip) || | 196 | ct->tuplehash[!dir].tuple.dst.u3.ip) || |
196 | (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && | 197 | (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && |
197 | ct->tuplehash[dir].tuple.src.u.all != | 198 | ct->tuplehash[dir].tuple.src.u.all != |
198 | ct->tuplehash[!dir].tuple.dst.u.all)) | 199 | ct->tuplehash[!dir].tuple.dst.u.all)) { |
199 | if (nf_xfrm_me_harder(skb, AF_INET) < 0) | 200 | err = nf_xfrm_me_harder(skb, AF_INET); |
200 | ret = NF_DROP; | 201 | if (err < 0) |
202 | ret = NF_DROP_ERR(err); | ||
203 | } | ||
201 | } | 204 | } |
202 | #endif | 205 | #endif |
203 | return ret; | 206 | return ret; |
@@ -213,6 +216,7 @@ nf_nat_ipv4_local_fn(unsigned int hooknum, | |||
213 | const struct nf_conn *ct; | 216 | const struct nf_conn *ct; |
214 | enum ip_conntrack_info ctinfo; | 217 | enum ip_conntrack_info ctinfo; |
215 | unsigned int ret; | 218 | unsigned int ret; |
219 | int err; | ||
216 | 220 | ||
217 | /* root is playing with raw sockets. */ | 221 | /* root is playing with raw sockets. */ |
218 | if (skb->len < sizeof(struct iphdr) || | 222 | if (skb->len < sizeof(struct iphdr) || |
@@ -226,16 +230,19 @@ nf_nat_ipv4_local_fn(unsigned int hooknum, | |||
226 | 230 | ||
227 | if (ct->tuplehash[dir].tuple.dst.u3.ip != | 231 | if (ct->tuplehash[dir].tuple.dst.u3.ip != |
228 | ct->tuplehash[!dir].tuple.src.u3.ip) { | 232 | ct->tuplehash[!dir].tuple.src.u3.ip) { |
229 | if (ip_route_me_harder(skb, RTN_UNSPEC)) | 233 | err = ip_route_me_harder(skb, RTN_UNSPEC); |
230 | ret = NF_DROP; | 234 | if (err < 0) |
235 | ret = NF_DROP_ERR(err); | ||
231 | } | 236 | } |
232 | #ifdef CONFIG_XFRM | 237 | #ifdef CONFIG_XFRM |
233 | else if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && | 238 | else if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && |
234 | ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && | 239 | ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMP && |
235 | ct->tuplehash[dir].tuple.dst.u.all != | 240 | ct->tuplehash[dir].tuple.dst.u.all != |
236 | ct->tuplehash[!dir].tuple.src.u.all) | 241 | ct->tuplehash[!dir].tuple.src.u.all) { |
237 | if (nf_xfrm_me_harder(skb, AF_INET) < 0) | 242 | err = nf_xfrm_me_harder(skb, AF_INET); |
238 | ret = NF_DROP; | 243 | if (err < 0) |
244 | ret = NF_DROP_ERR(err); | ||
245 | } | ||
239 | #endif | 246 | #endif |
240 | } | 247 | } |
241 | return ret; | 248 | return ret; |
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c index 2820aa18b542..567d84168bd2 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | |||
@@ -1,6 +1,7 @@ | |||
1 | 1 | ||
2 | /* (C) 1999-2001 Paul `Rusty' Russell | 2 | /* (C) 1999-2001 Paul `Rusty' Russell |
3 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> | 3 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> |
4 | * (C) 2006-2012 Patrick McHardy <kaber@trash.net> | ||
4 | * | 5 | * |
5 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c index f2ca12794081..4c48e434bb1f 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4_compat.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * | 2 | * |
3 | * (C) 1999-2001 Paul `Rusty' Russell | 3 | * (C) 1999-2001 Paul `Rusty' Russell |
4 | * (C) 2002-2006 Netfilter Core Team <coreteam@netfilter.org> | 4 | * (C) 2002-2006 Netfilter Core Team <coreteam@netfilter.org> |
5 | * (C) 2006-2010 Patrick McHardy <kaber@trash.net> | ||
5 | * | 6 | * |
6 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License version 2 as | 8 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c index c2cd63d2d892..a338dad41b7d 100644 --- a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c +++ b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* (C) 1999-2001 Paul `Rusty' Russell | 1 | /* (C) 1999-2001 Paul `Rusty' Russell |
2 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> | 2 | * (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org> |
3 | * (C) 2006-2010 Patrick McHardy <kaber@trash.net> | ||
3 | * | 4 | * |
4 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License version 2 as | 6 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/net/ipv4/netfilter/nf_nat_h323.c b/net/ipv4/netfilter/nf_nat_h323.c index 9c3db10b22d3..9eea059dd621 100644 --- a/net/ipv4/netfilter/nf_nat_h323.c +++ b/net/ipv4/netfilter/nf_nat_h323.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * H.323 extension for NAT alteration. | 2 | * H.323 extension for NAT alteration. |
3 | * | 3 | * |
4 | * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net> | 4 | * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net> |
5 | * Copyright (c) 2006-2012 Patrick McHardy <kaber@trash.net> | ||
5 | * | 6 | * |
6 | * This source code is licensed under General Public License version 2. | 7 | * This source code is licensed under General Public License version 2. |
7 | * | 8 | * |
diff --git a/net/ipv4/netfilter/nf_nat_pptp.c b/net/ipv4/netfilter/nf_nat_pptp.c index a06d7d74817d..657d2307f031 100644 --- a/net/ipv4/netfilter/nf_nat_pptp.c +++ b/net/ipv4/netfilter/nf_nat_pptp.c | |||
@@ -13,6 +13,8 @@ | |||
13 | * | 13 | * |
14 | * Development of this code funded by Astaro AG (http://www.astaro.com/) | 14 | * Development of this code funded by Astaro AG (http://www.astaro.com/) |
15 | * | 15 | * |
16 | * (C) 2006-2012 Patrick McHardy <kaber@trash.net> | ||
17 | * | ||
16 | * TODO: - NAT to a unique tuple, not to TCP source port | 18 | * TODO: - NAT to a unique tuple, not to TCP source port |
17 | * (needs netfilter tuple reservation) | 19 | * (needs netfilter tuple reservation) |
18 | */ | 20 | */ |
diff --git a/net/ipv4/netfilter/nf_nat_proto_gre.c b/net/ipv4/netfilter/nf_nat_proto_gre.c index ea44f02563b5..690d890111bb 100644 --- a/net/ipv4/netfilter/nf_nat_proto_gre.c +++ b/net/ipv4/netfilter/nf_nat_proto_gre.c | |||
@@ -21,6 +21,8 @@ | |||
21 | * | 21 | * |
22 | * Development of this code funded by Astaro AG (http://www.astaro.com/) | 22 | * Development of this code funded by Astaro AG (http://www.astaro.com/) |
23 | * | 23 | * |
24 | * (C) 2006-2012 Patrick McHardy <kaber@trash.net> | ||
25 | * | ||
24 | */ | 26 | */ |
25 | 27 | ||
26 | #include <linux/module.h> | 28 | #include <linux/module.h> |
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c index bac712293fd6..5f011cc89cd9 100644 --- a/net/ipv4/netfilter/nf_nat_snmp_basic.c +++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c | |||
@@ -38,6 +38,8 @@ | |||
38 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 38 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
39 | * | 39 | * |
40 | * Author: James Morris <jmorris@intercode.com.au> | 40 | * Author: James Morris <jmorris@intercode.com.au> |
41 | * | ||
42 | * Copyright (c) 2006-2010 Patrick McHardy <kaber@trash.net> | ||
41 | */ | 43 | */ |
42 | #include <linux/module.h> | 44 | #include <linux/module.h> |
43 | #include <linux/moduleparam.h> | 45 | #include <linux/moduleparam.h> |