Skip to content

Commit

Permalink
netfilter: Pass nf_hook_state through nft_set_pktinfo*().
Browse files Browse the repository at this point in the history
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
davem330 committed Apr 4, 2015
1 parent 8f8a371 commit 073bfd5
Show file tree
Hide file tree
Showing 11 changed files with 25 additions and 30 deletions.
7 changes: 3 additions & 4 deletions include/net/netfilter/nf_tables.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,11 @@ struct nft_pktinfo {
static inline void nft_set_pktinfo(struct nft_pktinfo *pkt,
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out)
const struct nf_hook_state *state)
{
pkt->skb = skb;
pkt->in = pkt->xt.in = in;
pkt->out = pkt->xt.out = out;
pkt->in = pkt->xt.in = state->in;
pkt->out = pkt->xt.out = state->out;
pkt->ops = ops;
pkt->xt.hooknum = ops->hooknum;
pkt->xt.family = ops->pf;
Expand Down
5 changes: 2 additions & 3 deletions include/net/netfilter/nf_tables_ipv4.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ static inline void
nft_set_pktinfo_ipv4(struct nft_pktinfo *pkt,
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out)
const struct nf_hook_state *state)
{
struct iphdr *ip;

nft_set_pktinfo(pkt, ops, skb, in, out);
nft_set_pktinfo(pkt, ops, skb, state);

ip = ip_hdr(pkt->skb);
pkt->tprot = ip->protocol;
Expand Down
5 changes: 2 additions & 3 deletions include/net/netfilter/nf_tables_ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@ static inline int
nft_set_pktinfo_ipv6(struct nft_pktinfo *pkt,
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out)
const struct nf_hook_state *state)
{
int protohdr, thoff = 0;
unsigned short frag_off;

nft_set_pktinfo(pkt, ops, skb, in, out);
nft_set_pktinfo(pkt, ops, skb, state);

protohdr = ipv6_find_hdr(pkt->skb, &thoff, -1, &frag_off, NULL);
/* If malformed, drop it */
Expand Down
24 changes: 11 additions & 13 deletions net/bridge/netfilter/nf_tables_bridge.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,27 +67,25 @@ EXPORT_SYMBOL_GPL(nft_bridge_ip6hdr_validate);
static inline void nft_bridge_set_pktinfo_ipv4(struct nft_pktinfo *pkt,
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out)
const struct nf_hook_state *state)
{
if (nft_bridge_iphdr_validate(skb))
nft_set_pktinfo_ipv4(pkt, ops, skb, in, out);
nft_set_pktinfo_ipv4(pkt, ops, skb, state);
else
nft_set_pktinfo(pkt, ops, skb, in, out);
nft_set_pktinfo(pkt, ops, skb, state);
}

static inline void nft_bridge_set_pktinfo_ipv6(struct nft_pktinfo *pkt,
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out)
const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct nf_hook_state *state)
{
#if IS_ENABLED(CONFIG_IPV6)
if (nft_bridge_ip6hdr_validate(skb) &&
nft_set_pktinfo_ipv6(pkt, ops, skb, in, out) == 0)
nft_set_pktinfo_ipv6(pkt, ops, skb, state) == 0)
return;
#endif
nft_set_pktinfo(pkt, ops, skb, in, out);
nft_set_pktinfo(pkt, ops, skb, state);
}

static unsigned int
Expand All @@ -99,13 +97,13 @@ nft_do_chain_bridge(const struct nf_hook_ops *ops,

switch (eth_hdr(skb)->h_proto) {
case htons(ETH_P_IP):
nft_bridge_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
nft_bridge_set_pktinfo_ipv4(&pkt, ops, skb, state);
break;
case htons(ETH_P_IPV6):
nft_bridge_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out);
nft_bridge_set_pktinfo_ipv6(&pkt, ops, skb, state);
break;
default:
nft_set_pktinfo(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo(&pkt, ops, skb, state);
break;
}

Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/nf_tables_arp.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ nft_do_chain_arp(const struct nf_hook_ops *ops,
{
struct nft_pktinfo pkt;

nft_set_pktinfo(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo(&pkt, ops, skb, state);

return nft_do_chain(&pkt, ops);
}
Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/nf_tables_ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ static unsigned int nft_do_chain_ipv4(const struct nf_hook_ops *ops,
{
struct nft_pktinfo pkt;

nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo_ipv4(&pkt, ops, skb, state);

return nft_do_chain(&pkt, ops);
}
Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/nft_chain_nat_ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static unsigned int nft_nat_do_chain(const struct nf_hook_ops *ops,
{
struct nft_pktinfo pkt;

nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo_ipv4(&pkt, ops, skb, state);

return nft_do_chain(&pkt, ops);
}
Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/netfilter/nft_chain_route_ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ static unsigned int nf_route_table_hook(const struct nf_hook_ops *ops,
ip_hdrlen(skb) < sizeof(struct iphdr))
return NF_ACCEPT;

nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo_ipv4(&pkt, ops, skb, state);

mark = skb->mark;
iph = ip_hdr(skb);
Expand Down
2 changes: 1 addition & 1 deletion net/ipv6/netfilter/nf_tables_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ static unsigned int nft_do_chain_ipv6(const struct nf_hook_ops *ops,
struct nft_pktinfo pkt;

/* malformed packet, drop it */
if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out) < 0)
if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state) < 0)
return NF_DROP;

return nft_do_chain(&pkt, ops);
Expand Down
2 changes: 1 addition & 1 deletion net/ipv6/netfilter/nft_chain_nat_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ static unsigned int nft_nat_do_chain(const struct nf_hook_ops *ops,
{
struct nft_pktinfo pkt;

nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out);
nft_set_pktinfo_ipv6(&pkt, ops, skb, state);

return nft_do_chain(&pkt, ops);
}
Expand Down
2 changes: 1 addition & 1 deletion net/ipv6/netfilter/nft_chain_route_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static unsigned int nf_route_table_hook(const struct nf_hook_ops *ops,
u32 mark, flowlabel;

/* malformed packet, drop it */
if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out) < 0)
if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state) < 0)
return NF_DROP;

/* save source/dest address, mark, hoplimit, flowlabel, priority */
Expand Down

0 comments on commit 073bfd5

Please sign in to comment.