diff options
author | David S. Miller <davem@davemloft.net> | 2017-03-21 17:28:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-21 17:28:08 -0400 |
commit | 41e95736b30833710c1e77a2877c2d71133450f7 (patch) | |
tree | cebd559e5eefc9ab9fd83e16355105e3535125ac /net/bridge | |
parent | b9974d76f2f505ab0fe9101766b302511988dece (diff) | |
parent | 4485a841be171dbd8d3f0701b00f59d389e94ce6 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says:
====================
Netfilter/IPVS updates for net-next
The following patchset contains Netfilter/IPVS updates for your
net-next tree. A couple of new features for nf_tables, and unsorted
cleanups and incremental updates for the Netfilter tree. More
specifically, they are:
1) Allow to check for TCP option presence via nft_exthdr, patch
from Phil Sutter.
2) Add symmetric hash support to nft_hash, from Laura Garcia Liebana.
3) Use pr_cont() in ebt_log, from Joe Perches.
4) Remove some dead code in arp_tables reported via static analysis
tool, from Colin Ian King.
5) Consolidate nf_tables expression validation, from Liping Zhang.
6) Consolidate set lookup via nft_set_lookup().
7) Remove unnecessary rcu read lock side in bridge netfilter, from
Florian Westphal.
8) Remove unused variable in nf_reject_ipv4, from Tahee Yoo.
9) Pass nft_ctx struct to object initialization indirections, from
Florian Westphal.
10) Add code to integrate conntrack helper into nf_tables, also from
Florian.
11) Allow to check if interface index or name exists via
NFTA_FIB_F_PRESENT, from Phil Sutter.
12) Simplify resolve_normal_ct(), from Florian.
13) Use per-limit spinlock in nft_limit and xt_limit, from Liping Zhang.
14) Use rwlock in nft_set_rbtree set, also from Liping Zhang.
15) One patch to remove a useless printk at netns init path in ipvs,
and several patches to document IPVS knobs.
16) Use refcount_t for reference counter in the Netfilter/IPVS code,
from Elena Reshetova.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_netfilter_hooks.c | 3 | ||||
-rw-r--r-- | net/bridge/netfilter/ebt_log.c | 34 | ||||
-rw-r--r-- | net/bridge/netfilter/nft_reject_bridge.c | 6 |
3 files changed, 18 insertions, 25 deletions
diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c index fa87fbd62bb7..d20b01b8d103 100644 --- a/net/bridge/br_netfilter_hooks.c +++ b/net/bridge/br_netfilter_hooks.c | |||
@@ -995,13 +995,10 @@ int br_nf_hook_thresh(unsigned int hook, struct net *net, | |||
995 | if (!elem) | 995 | if (!elem) |
996 | return okfn(net, sk, skb); | 996 | return okfn(net, sk, skb); |
997 | 997 | ||
998 | /* We may already have this, but read-locks nest anyway */ | ||
999 | rcu_read_lock(); | ||
1000 | nf_hook_state_init(&state, hook, NFPROTO_BRIDGE, indev, outdev, | 998 | nf_hook_state_init(&state, hook, NFPROTO_BRIDGE, indev, outdev, |
1001 | sk, net, okfn); | 999 | sk, net, okfn); |
1002 | 1000 | ||
1003 | ret = nf_hook_slow(skb, &state, elem); | 1001 | ret = nf_hook_slow(skb, &state, elem); |
1004 | rcu_read_unlock(); | ||
1005 | if (ret == 1) | 1002 | if (ret == 1) |
1006 | ret = okfn(net, sk, skb); | 1003 | ret = okfn(net, sk, skb); |
1007 | 1004 | ||
diff --git a/net/bridge/netfilter/ebt_log.c b/net/bridge/netfilter/ebt_log.c index 98b9c8e8615e..707caea39743 100644 --- a/net/bridge/netfilter/ebt_log.c +++ b/net/bridge/netfilter/ebt_log.c | |||
@@ -62,10 +62,10 @@ print_ports(const struct sk_buff *skb, uint8_t protocol, int offset) | |||
62 | pptr = skb_header_pointer(skb, offset, | 62 | pptr = skb_header_pointer(skb, offset, |
63 | sizeof(_ports), &_ports); | 63 | sizeof(_ports), &_ports); |
64 | if (pptr == NULL) { | 64 | if (pptr == NULL) { |
65 | printk(" INCOMPLETE TCP/UDP header"); | 65 | pr_cont(" INCOMPLETE TCP/UDP header"); |
66 | return; | 66 | return; |
67 | } | 67 | } |
68 | printk(" SPT=%u DPT=%u", ntohs(pptr->src), ntohs(pptr->dst)); | 68 | pr_cont(" SPT=%u DPT=%u", ntohs(pptr->src), ntohs(pptr->dst)); |
69 | } | 69 | } |
70 | } | 70 | } |
71 | 71 | ||
@@ -100,11 +100,11 @@ ebt_log_packet(struct net *net, u_int8_t pf, unsigned int hooknum, | |||
100 | 100 | ||
101 | ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); | 101 | ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); |
102 | if (ih == NULL) { | 102 | if (ih == NULL) { |
103 | printk(" INCOMPLETE IP header"); | 103 | pr_cont(" INCOMPLETE IP header"); |
104 | goto out; | 104 | goto out; |
105 | } | 105 | } |
106 | printk(" IP SRC=%pI4 IP DST=%pI4, IP tos=0x%02X, IP proto=%d", | 106 | pr_cont(" IP SRC=%pI4 IP DST=%pI4, IP tos=0x%02X, IP proto=%d", |
107 | &ih->saddr, &ih->daddr, ih->tos, ih->protocol); | 107 | &ih->saddr, &ih->daddr, ih->tos, ih->protocol); |
108 | print_ports(skb, ih->protocol, ih->ihl*4); | 108 | print_ports(skb, ih->protocol, ih->ihl*4); |
109 | goto out; | 109 | goto out; |
110 | } | 110 | } |
@@ -120,11 +120,11 @@ ebt_log_packet(struct net *net, u_int8_t pf, unsigned int hooknum, | |||
120 | 120 | ||
121 | ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); | 121 | ih = skb_header_pointer(skb, 0, sizeof(_iph), &_iph); |
122 | if (ih == NULL) { | 122 | if (ih == NULL) { |
123 | printk(" INCOMPLETE IPv6 header"); | 123 | pr_cont(" INCOMPLETE IPv6 header"); |
124 | goto out; | 124 | goto out; |
125 | } | 125 | } |
126 | printk(" IPv6 SRC=%pI6 IPv6 DST=%pI6, IPv6 priority=0x%01X, Next Header=%d", | 126 | pr_cont(" IPv6 SRC=%pI6 IPv6 DST=%pI6, IPv6 priority=0x%01X, Next Header=%d", |
127 | &ih->saddr, &ih->daddr, ih->priority, ih->nexthdr); | 127 | &ih->saddr, &ih->daddr, ih->priority, ih->nexthdr); |
128 | nexthdr = ih->nexthdr; | 128 | nexthdr = ih->nexthdr; |
129 | offset_ph = ipv6_skip_exthdr(skb, sizeof(_iph), &nexthdr, &frag_off); | 129 | offset_ph = ipv6_skip_exthdr(skb, sizeof(_iph), &nexthdr, &frag_off); |
130 | if (offset_ph == -1) | 130 | if (offset_ph == -1) |
@@ -142,12 +142,12 @@ ebt_log_packet(struct net *net, u_int8_t pf, unsigned int hooknum, | |||
142 | 142 | ||
143 | ah = skb_header_pointer(skb, 0, sizeof(_arph), &_arph); | 143 | ah = skb_header_pointer(skb, 0, sizeof(_arph), &_arph); |
144 | if (ah == NULL) { | 144 | if (ah == NULL) { |
145 | printk(" INCOMPLETE ARP header"); | 145 | pr_cont(" INCOMPLETE ARP header"); |
146 | goto out; | 146 | goto out; |
147 | } | 147 | } |
148 | printk(" ARP HTYPE=%d, PTYPE=0x%04x, OPCODE=%d", | 148 | pr_cont(" ARP HTYPE=%d, PTYPE=0x%04x, OPCODE=%d", |
149 | ntohs(ah->ar_hrd), ntohs(ah->ar_pro), | 149 | ntohs(ah->ar_hrd), ntohs(ah->ar_pro), |
150 | ntohs(ah->ar_op)); | 150 | ntohs(ah->ar_op)); |
151 | 151 | ||
152 | /* If it's for Ethernet and the lengths are OK, | 152 | /* If it's for Ethernet and the lengths are OK, |
153 | * then log the ARP payload | 153 | * then log the ARP payload |
@@ -161,17 +161,17 @@ ebt_log_packet(struct net *net, u_int8_t pf, unsigned int hooknum, | |||
161 | ap = skb_header_pointer(skb, sizeof(_arph), | 161 | ap = skb_header_pointer(skb, sizeof(_arph), |
162 | sizeof(_arpp), &_arpp); | 162 | sizeof(_arpp), &_arpp); |
163 | if (ap == NULL) { | 163 | if (ap == NULL) { |
164 | printk(" INCOMPLETE ARP payload"); | 164 | pr_cont(" INCOMPLETE ARP payload"); |
165 | goto out; | 165 | goto out; |
166 | } | 166 | } |
167 | printk(" ARP MAC SRC=%pM ARP IP SRC=%pI4 ARP MAC DST=%pM ARP IP DST=%pI4", | 167 | pr_cont(" ARP MAC SRC=%pM ARP IP SRC=%pI4 ARP MAC DST=%pM ARP IP DST=%pI4", |
168 | ap->mac_src, ap->ip_src, ap->mac_dst, ap->ip_dst); | 168 | ap->mac_src, ap->ip_src, |
169 | ap->mac_dst, ap->ip_dst); | ||
169 | } | 170 | } |
170 | } | 171 | } |
171 | out: | 172 | out: |
172 | printk("\n"); | 173 | pr_cont("\n"); |
173 | spin_unlock_bh(&ebt_log_lock); | 174 | spin_unlock_bh(&ebt_log_lock); |
174 | |||
175 | } | 175 | } |
176 | 176 | ||
177 | static unsigned int | 177 | static unsigned int |
diff --git a/net/bridge/netfilter/nft_reject_bridge.c b/net/bridge/netfilter/nft_reject_bridge.c index 206dc266ecd2..346ef6b00b8f 100644 --- a/net/bridge/netfilter/nft_reject_bridge.c +++ b/net/bridge/netfilter/nft_reject_bridge.c | |||
@@ -375,11 +375,7 @@ static int nft_reject_bridge_init(const struct nft_ctx *ctx, | |||
375 | const struct nlattr * const tb[]) | 375 | const struct nlattr * const tb[]) |
376 | { | 376 | { |
377 | struct nft_reject *priv = nft_expr_priv(expr); | 377 | struct nft_reject *priv = nft_expr_priv(expr); |
378 | int icmp_code, err; | 378 | int icmp_code; |
379 | |||
380 | err = nft_reject_bridge_validate(ctx, expr, NULL); | ||
381 | if (err < 0) | ||
382 | return err; | ||
383 | 379 | ||
384 | if (tb[NFTA_REJECT_TYPE] == NULL) | 380 | if (tb[NFTA_REJECT_TYPE] == NULL) |
385 | return -EINVAL; | 381 | return -EINVAL; |