[NETFILTER]: Replace sk_buff ** with sk_buff *
With all the users of the double pointers removed, this patch mops up by finally replacing all occurances of sk_buff ** in the netfilter API by sk_buff *. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2ca7b0ac02
commit
3db05fea51
@@ -23,7 +23,7 @@
|
||||
|
||||
#include "br_private.h"
|
||||
|
||||
int (*br_should_route_hook) (struct sk_buff **pskb) = NULL;
|
||||
int (*br_should_route_hook)(struct sk_buff *skb);
|
||||
|
||||
static struct llc_sap *br_stp_sap;
|
||||
|
||||
|
@@ -149,7 +149,7 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
|
||||
case BR_STATE_FORWARDING:
|
||||
|
||||
if (br_should_route_hook) {
|
||||
if (br_should_route_hook(&skb))
|
||||
if (br_should_route_hook(skb))
|
||||
return skb;
|
||||
dest = eth_hdr(skb)->h_dest;
|
||||
}
|
||||
|
@@ -503,13 +503,12 @@ inhdr_error:
|
||||
* receiving device) to make netfilter happy, the REDIRECT
|
||||
* target in particular. Save the original destination IP
|
||||
* address to be able to detect DNAT afterwards. */
|
||||
static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_pre_routing(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct iphdr *iph;
|
||||
struct sk_buff *skb = *pskb;
|
||||
__u32 len = nf_bridge_encap_header_len(skb);
|
||||
|
||||
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
|
||||
@@ -584,13 +583,11 @@ out:
|
||||
* took place when the packet entered the bridge), but we
|
||||
* register an IPv4 PRE_ROUTING 'sabotage' hook that will
|
||||
* prevent this from happening. */
|
||||
static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
|
||||
if (skb->dst == (struct dst_entry *)&__fake_rtable) {
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
@@ -625,12 +622,11 @@ static int br_nf_forward_finish(struct sk_buff *skb)
|
||||
* but we are still able to filter on the 'real' indev/outdev
|
||||
* because of the physdev module. For ARP, indev and outdev are the
|
||||
* bridge ports. */
|
||||
static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
struct net_device *parent;
|
||||
int pf;
|
||||
@@ -648,7 +644,7 @@ static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
|
||||
else
|
||||
pf = PF_INET6;
|
||||
|
||||
nf_bridge_pull_encap_header(*pskb);
|
||||
nf_bridge_pull_encap_header(skb);
|
||||
|
||||
nf_bridge = skb->nf_bridge;
|
||||
if (skb->pkt_type == PACKET_OTHERHOST) {
|
||||
@@ -666,12 +662,11 @@ static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff **pskb,
|
||||
return NF_STOLEN;
|
||||
}
|
||||
|
||||
static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct net_device **d = (struct net_device **)(skb->cb);
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
@@ -682,12 +677,12 @@ static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
|
||||
if (skb->protocol != htons(ETH_P_ARP)) {
|
||||
if (!IS_VLAN_ARP(skb))
|
||||
return NF_ACCEPT;
|
||||
nf_bridge_pull_encap_header(*pskb);
|
||||
nf_bridge_pull_encap_header(skb);
|
||||
}
|
||||
|
||||
if (arp_hdr(skb)->ar_pln != 4) {
|
||||
if (IS_VLAN_ARP(skb))
|
||||
nf_bridge_push_encap_header(*pskb);
|
||||
nf_bridge_push_encap_header(skb);
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
*d = (struct net_device *)in;
|
||||
@@ -709,13 +704,12 @@ static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff **pskb,
|
||||
* NF_BR_PRI_FIRST, so no relevant PF_BRIDGE/INPUT functions have been nor
|
||||
* will be executed.
|
||||
*/
|
||||
static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_local_out(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct net_device *realindev;
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
|
||||
if (!skb->nf_bridge)
|
||||
@@ -752,13 +746,12 @@ static int br_nf_dev_queue_xmit(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
/* PF_BRIDGE/POST_ROUTING ********************************************/
|
||||
static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct nf_bridge_info *nf_bridge = (*pskb)->nf_bridge;
|
||||
struct nf_bridge_info *nf_bridge = skb->nf_bridge;
|
||||
struct net_device *realoutdev = bridge_parent(skb->dev);
|
||||
int pf;
|
||||
|
||||
@@ -828,13 +821,13 @@ print_error:
|
||||
/* IP/SABOTAGE *****************************************************/
|
||||
/* Don't hand locally destined packets to PF_INET(6)/PRE_ROUTING
|
||||
* for the second time. */
|
||||
static unsigned int ip_sabotage_in(unsigned int hook, struct sk_buff **pskb,
|
||||
static unsigned int ip_sabotage_in(unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
if ((*pskb)->nf_bridge &&
|
||||
!((*pskb)->nf_bridge->mask & BRNF_NF_BRIDGE_PREROUTING)) {
|
||||
if (skb->nf_bridge &&
|
||||
!(skb->nf_bridge->mask & BRNF_NF_BRIDGE_PREROUTING)) {
|
||||
return NF_STOP;
|
||||
}
|
||||
|
||||
|
@@ -15,7 +15,7 @@
|
||||
#include <net/arp.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
static int ebt_target_reply(struct sk_buff **pskb, unsigned int hooknr,
|
||||
static int ebt_target_reply(struct sk_buff *skb, unsigned int hooknr,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
const void *data, unsigned int datalen)
|
||||
{
|
||||
@@ -23,7 +23,6 @@ static int ebt_target_reply(struct sk_buff **pskb, unsigned int hooknr,
|
||||
__be32 _sip, *siptr, _dip, *diptr;
|
||||
struct arphdr _ah, *ap;
|
||||
unsigned char _sha[ETH_ALEN], *shp;
|
||||
struct sk_buff *skb = *pskb;
|
||||
|
||||
ap = skb_header_pointer(skb, 0, sizeof(_ah), &_ah);
|
||||
if (ap == NULL)
|
||||
|
@@ -14,16 +14,16 @@
|
||||
#include <linux/module.h>
|
||||
#include <net/sock.h>
|
||||
|
||||
static int ebt_target_dnat(struct sk_buff **pskb, unsigned int hooknr,
|
||||
static int ebt_target_dnat(struct sk_buff *skb, unsigned int hooknr,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
const void *data, unsigned int datalen)
|
||||
{
|
||||
struct ebt_nat_info *info = (struct ebt_nat_info *)data;
|
||||
|
||||
if (skb_make_writable(*pskb, 0))
|
||||
if (skb_make_writable(skb, 0))
|
||||
return NF_DROP;
|
||||
|
||||
memcpy(eth_hdr(*pskb)->h_dest, info->mac, ETH_ALEN);
|
||||
memcpy(eth_hdr(skb)->h_dest, info->mac, ETH_ALEN);
|
||||
return info->target;
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,7 @@
|
||||
#include <linux/netfilter_bridge/ebt_mark_t.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
static int ebt_target_mark(struct sk_buff **pskb, unsigned int hooknr,
|
||||
static int ebt_target_mark(struct sk_buff *skb, unsigned int hooknr,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
const void *data, unsigned int datalen)
|
||||
{
|
||||
@@ -25,13 +25,13 @@ static int ebt_target_mark(struct sk_buff **pskb, unsigned int hooknr,
|
||||
int action = info->target & -16;
|
||||
|
||||
if (action == MARK_SET_VALUE)
|
||||
(*pskb)->mark = info->mark;
|
||||
skb->mark = info->mark;
|
||||
else if (action == MARK_OR_VALUE)
|
||||
(*pskb)->mark |= info->mark;
|
||||
skb->mark |= info->mark;
|
||||
else if (action == MARK_AND_VALUE)
|
||||
(*pskb)->mark &= info->mark;
|
||||
skb->mark &= info->mark;
|
||||
else
|
||||
(*pskb)->mark ^= info->mark;
|
||||
skb->mark ^= info->mark;
|
||||
|
||||
return info->target | ~EBT_VERDICT_BITS;
|
||||
}
|
||||
|
@@ -15,21 +15,21 @@
|
||||
#include <net/sock.h>
|
||||
#include "../br_private.h"
|
||||
|
||||
static int ebt_target_redirect(struct sk_buff **pskb, unsigned int hooknr,
|
||||
static int ebt_target_redirect(struct sk_buff *skb, unsigned int hooknr,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
const void *data, unsigned int datalen)
|
||||
{
|
||||
struct ebt_redirect_info *info = (struct ebt_redirect_info *)data;
|
||||
|
||||
if (skb_make_writable(*pskb, 0))
|
||||
if (skb_make_writable(skb, 0))
|
||||
return NF_DROP;
|
||||
|
||||
if (hooknr != NF_BR_BROUTING)
|
||||
memcpy(eth_hdr(*pskb)->h_dest,
|
||||
memcpy(eth_hdr(skb)->h_dest,
|
||||
in->br_port->br->dev->dev_addr, ETH_ALEN);
|
||||
else
|
||||
memcpy(eth_hdr(*pskb)->h_dest, in->dev_addr, ETH_ALEN);
|
||||
(*pskb)->pkt_type = PACKET_HOST;
|
||||
memcpy(eth_hdr(skb)->h_dest, in->dev_addr, ETH_ALEN);
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
return info->target;
|
||||
}
|
||||
|
||||
|
@@ -16,26 +16,26 @@
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/arp.h>
|
||||
|
||||
static int ebt_target_snat(struct sk_buff **pskb, unsigned int hooknr,
|
||||
static int ebt_target_snat(struct sk_buff *skb, unsigned int hooknr,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
const void *data, unsigned int datalen)
|
||||
{
|
||||
struct ebt_nat_info *info = (struct ebt_nat_info *) data;
|
||||
|
||||
if (skb_make_writable(*pskb, 0))
|
||||
if (skb_make_writable(skb, 0))
|
||||
return NF_DROP;
|
||||
|
||||
memcpy(eth_hdr(*pskb)->h_source, info->mac, ETH_ALEN);
|
||||
memcpy(eth_hdr(skb)->h_source, info->mac, ETH_ALEN);
|
||||
if (!(info->target & NAT_ARP_BIT) &&
|
||||
eth_hdr(*pskb)->h_proto == htons(ETH_P_ARP)) {
|
||||
eth_hdr(skb)->h_proto == htons(ETH_P_ARP)) {
|
||||
struct arphdr _ah, *ap;
|
||||
|
||||
ap = skb_header_pointer(*pskb, 0, sizeof(_ah), &_ah);
|
||||
ap = skb_header_pointer(skb, 0, sizeof(_ah), &_ah);
|
||||
if (ap == NULL)
|
||||
return EBT_DROP;
|
||||
if (ap->ar_hln != ETH_ALEN)
|
||||
goto out;
|
||||
if (skb_store_bits(*pskb, sizeof(_ah), info->mac,ETH_ALEN))
|
||||
if (skb_store_bits(skb, sizeof(_ah), info->mac,ETH_ALEN))
|
||||
return EBT_DROP;
|
||||
}
|
||||
out:
|
||||
|
@@ -51,11 +51,11 @@ static struct ebt_table broute_table =
|
||||
.me = THIS_MODULE,
|
||||
};
|
||||
|
||||
static int ebt_broute(struct sk_buff **pskb)
|
||||
static int ebt_broute(struct sk_buff *skb)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = ebt_do_table(NF_BR_BROUTING, pskb, (*pskb)->dev, NULL,
|
||||
ret = ebt_do_table(NF_BR_BROUTING, skb, skb->dev, NULL,
|
||||
&broute_table);
|
||||
if (ret == NF_DROP)
|
||||
return 1; /* route it */
|
||||
|
@@ -61,10 +61,10 @@ static struct ebt_table frame_filter =
|
||||
};
|
||||
|
||||
static unsigned int
|
||||
ebt_hook (unsigned int hook, struct sk_buff **pskb, const struct net_device *in,
|
||||
ebt_hook(unsigned int hook, struct sk_buff *skb, const struct net_device *in,
|
||||
const struct net_device *out, int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
return ebt_do_table(hook, pskb, in, out, &frame_filter);
|
||||
return ebt_do_table(hook, skb, in, out, &frame_filter);
|
||||
}
|
||||
|
||||
static struct nf_hook_ops ebt_ops_filter[] = {
|
||||
|
@@ -61,17 +61,17 @@ static struct ebt_table frame_nat =
|
||||
};
|
||||
|
||||
static unsigned int
|
||||
ebt_nat_dst(unsigned int hook, struct sk_buff **pskb, const struct net_device *in
|
||||
ebt_nat_dst(unsigned int hook, struct sk_buff *skb, const struct net_device *in
|
||||
, const struct net_device *out, int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
return ebt_do_table(hook, pskb, in, out, &frame_nat);
|
||||
return ebt_do_table(hook, skb, in, out, &frame_nat);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
ebt_nat_src(unsigned int hook, struct sk_buff **pskb, const struct net_device *in
|
||||
ebt_nat_src(unsigned int hook, struct sk_buff *skb, const struct net_device *in
|
||||
, const struct net_device *out, int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
return ebt_do_table(hook, pskb, in, out, &frame_nat);
|
||||
return ebt_do_table(hook, skb, in, out, &frame_nat);
|
||||
}
|
||||
|
||||
static struct nf_hook_ops ebt_ops_nat[] = {
|
||||
|
@@ -142,7 +142,7 @@ static inline int ebt_basic_match(struct ebt_entry *e, struct ethhdr *h,
|
||||
}
|
||||
|
||||
/* Do some firewalling */
|
||||
unsigned int ebt_do_table (unsigned int hook, struct sk_buff **pskb,
|
||||
unsigned int ebt_do_table (unsigned int hook, struct sk_buff *skb,
|
||||
const struct net_device *in, const struct net_device *out,
|
||||
struct ebt_table *table)
|
||||
{
|
||||
@@ -172,19 +172,19 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff **pskb,
|
||||
base = private->entries;
|
||||
i = 0;
|
||||
while (i < nentries) {
|
||||
if (ebt_basic_match(point, eth_hdr(*pskb), in, out))
|
||||
if (ebt_basic_match(point, eth_hdr(skb), in, out))
|
||||
goto letscontinue;
|
||||
|
||||
if (EBT_MATCH_ITERATE(point, ebt_do_match, *pskb, in, out) != 0)
|
||||
if (EBT_MATCH_ITERATE(point, ebt_do_match, skb, in, out) != 0)
|
||||
goto letscontinue;
|
||||
|
||||
/* increase counter */
|
||||
(*(counter_base + i)).pcnt++;
|
||||
(*(counter_base + i)).bcnt+=(**pskb).len;
|
||||
(*(counter_base + i)).bcnt += skb->len;
|
||||
|
||||
/* these should only watch: not modify, nor tell us
|
||||
what to do with the packet */
|
||||
EBT_WATCHER_ITERATE(point, ebt_do_watcher, *pskb, hook, in,
|
||||
EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, hook, in,
|
||||
out);
|
||||
|
||||
t = (struct ebt_entry_target *)
|
||||
@@ -193,7 +193,7 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff **pskb,
|
||||
if (!t->u.target->target)
|
||||
verdict = ((struct ebt_standard_target *)t)->verdict;
|
||||
else
|
||||
verdict = t->u.target->target(pskb, hook,
|
||||
verdict = t->u.target->target(skb, hook,
|
||||
in, out, t->data, t->target_size);
|
||||
if (verdict == EBT_ACCEPT) {
|
||||
read_unlock_bh(&table->lock);
|
||||
|
Reference in New Issue
Block a user