aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2015-04-02 08:31:43 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2015-04-08 10:49:10 -0400
commit383307838d41935841ba6b2e939b968326e2dea1 (patch)
tree85a4d1735e895f9549e63a06209b893097ab686c /net
parenta99074ae1f5cce08c769542440391981899ac04c (diff)
netfilter: bridge: add and use nf_bridge_info_get helper
Don't access skb->nf_bridge directly, this pointer will be removed soon. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/bridge/br_netfilter.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
index ca1cb6704a78..301f12b0a7cd 100644
--- a/net/bridge/br_netfilter.c
+++ b/net/bridge/br_netfilter.c
@@ -124,6 +124,11 @@ struct brnf_frag_data {
124static DEFINE_PER_CPU(struct brnf_frag_data, brnf_frag_data_storage); 124static DEFINE_PER_CPU(struct brnf_frag_data, brnf_frag_data_storage);
125#endif 125#endif
126 126
127static struct nf_bridge_info *nf_bridge_info_get(const struct sk_buff *skb)
128{
129 return skb->nf_bridge;
130}
131
127static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) 132static inline struct rtable *bridge_parent_rtable(const struct net_device *dev)
128{ 133{
129 struct net_bridge_port *port; 134 struct net_bridge_port *port;
@@ -268,7 +273,7 @@ static void nf_bridge_update_protocol(struct sk_buff *skb)
268 * bridge PRE_ROUTING hook. */ 273 * bridge PRE_ROUTING hook. */
269static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb) 274static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
270{ 275{
271 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 276 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
272 struct rtable *rt; 277 struct rtable *rt;
273 278
274 if (nf_bridge->mask & BRNF_PKT_TYPE) { 279 if (nf_bridge->mask & BRNF_PKT_TYPE) {
@@ -300,7 +305,6 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
300 */ 305 */
301static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb) 306static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb)
302{ 307{
303 struct nf_bridge_info *nf_bridge = skb->nf_bridge;
304 struct neighbour *neigh; 308 struct neighbour *neigh;
305 struct dst_entry *dst; 309 struct dst_entry *dst;
306 310
@@ -310,6 +314,7 @@ static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb)
310 dst = skb_dst(skb); 314 dst = skb_dst(skb);
311 neigh = dst_neigh_lookup_skb(dst, skb); 315 neigh = dst_neigh_lookup_skb(dst, skb);
312 if (neigh) { 316 if (neigh) {
317 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
313 int ret; 318 int ret;
314 319
315 if (neigh->hh.hh_len) { 320 if (neigh->hh.hh_len) {
@@ -396,7 +401,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
396{ 401{
397 struct net_device *dev = skb->dev; 402 struct net_device *dev = skb->dev;
398 struct iphdr *iph = ip_hdr(skb); 403 struct iphdr *iph = ip_hdr(skb);
399 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 404 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
400 struct rtable *rt; 405 struct rtable *rt;
401 int err; 406 int err;
402 int frag_max_size; 407 int frag_max_size;
@@ -488,7 +493,7 @@ static struct net_device *brnf_get_logical_dev(struct sk_buff *skb, const struct
488/* Some common code for IPv4/IPv6 */ 493/* Some common code for IPv4/IPv6 */
489static struct net_device *setup_pre_routing(struct sk_buff *skb) 494static struct net_device *setup_pre_routing(struct sk_buff *skb)
490{ 495{
491 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 496 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
492 497
493 if (skb->pkt_type == PACKET_OTHERHOST) { 498 if (skb->pkt_type == PACKET_OTHERHOST) {
494 skb->pkt_type = PACKET_HOST; 499 skb->pkt_type = PACKET_HOST;
@@ -687,7 +692,7 @@ static unsigned int br_nf_local_in(const struct nf_hook_ops *ops,
687/* PF_BRIDGE/FORWARD *************************************************/ 692/* PF_BRIDGE/FORWARD *************************************************/
688static int br_nf_forward_finish(struct sk_buff *skb) 693static int br_nf_forward_finish(struct sk_buff *skb)
689{ 694{
690 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 695 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
691 struct net_device *in; 696 struct net_device *in;
692 697
693 if (!IS_ARP(skb) && !IS_VLAN_ARP(skb)) { 698 if (!IS_ARP(skb) && !IS_VLAN_ARP(skb)) {
@@ -738,6 +743,10 @@ static unsigned int br_nf_forward_ip(const struct nf_hook_ops *ops,
738 if (!nf_bridge_unshare(skb)) 743 if (!nf_bridge_unshare(skb))
739 return NF_DROP; 744 return NF_DROP;
740 745
746 nf_bridge = nf_bridge_info_get(skb);
747 if (!nf_bridge)
748 return NF_DROP;
749
741 parent = bridge_parent(out); 750 parent = bridge_parent(out);
742 if (!parent) 751 if (!parent)
743 return NF_DROP; 752 return NF_DROP;
@@ -751,7 +760,6 @@ static unsigned int br_nf_forward_ip(const struct nf_hook_ops *ops,
751 760
752 nf_bridge_pull_encap_header(skb); 761 nf_bridge_pull_encap_header(skb);
753 762
754 nf_bridge = skb->nf_bridge;
755 if (skb->pkt_type == PACKET_OTHERHOST) { 763 if (skb->pkt_type == PACKET_OTHERHOST) {
756 skb->pkt_type = PACKET_HOST; 764 skb->pkt_type = PACKET_HOST;
757 nf_bridge->mask |= BRNF_PKT_TYPE; 765 nf_bridge->mask |= BRNF_PKT_TYPE;
@@ -886,7 +894,7 @@ static unsigned int br_nf_post_routing(const struct nf_hook_ops *ops,
886 const struct net_device *out, 894 const struct net_device *out,
887 int (*okfn)(struct sk_buff *)) 895 int (*okfn)(struct sk_buff *))
888{ 896{
889 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 897 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
890 struct net_device *realoutdev = bridge_parent(skb->dev); 898 struct net_device *realoutdev = bridge_parent(skb->dev);
891 u_int8_t pf; 899 u_int8_t pf;
892 900
@@ -955,7 +963,7 @@ static unsigned int ip_sabotage_in(const struct nf_hook_ops *ops,
955 */ 963 */
956static void br_nf_pre_routing_finish_bridge_slow(struct sk_buff *skb) 964static void br_nf_pre_routing_finish_bridge_slow(struct sk_buff *skb)
957{ 965{
958 struct nf_bridge_info *nf_bridge = skb->nf_bridge; 966 struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
959 967
960 skb_pull(skb, ETH_HLEN); 968 skb_pull(skb, ETH_HLEN);
961 nf_bridge->mask &= ~BRNF_BRIDGED_DNAT; 969 nf_bridge->mask &= ~BRNF_BRIDGED_DNAT;