netfilter: Use nf_hook_state.net
Instead of saying "net = dev_net(state->in?state->in:state->out)" just say "state->net". As that information is now availabe, much less confusing and much less error prone. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
29a26a5680
commit
9dff2c966a
|
@ -61,7 +61,7 @@ ebt_in_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
||||||
dev_net(state->in)->xt.frame_filter);
|
state->net->xt.frame_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
static unsigned int
|
||||||
|
@ -69,7 +69,7 @@ ebt_out_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
||||||
dev_net(state->out)->xt.frame_filter);
|
state->net->xt.frame_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops ebt_ops_filter[] __read_mostly = {
|
static struct nf_hook_ops ebt_ops_filter[] __read_mostly = {
|
||||||
|
|
|
@ -61,7 +61,7 @@ ebt_nat_in(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
||||||
dev_net(state->in)->xt.frame_nat);
|
state->net->xt.frame_nat);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
static unsigned int
|
||||||
|
@ -69,7 +69,7 @@ ebt_nat_out(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
return ebt_do_table(ops->hooknum, skb, state->in, state->out,
|
||||||
dev_net(state->out)->xt.frame_nat);
|
state->net->xt.frame_nat);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops ebt_ops_nat[] __read_mostly = {
|
static struct nf_hook_ops ebt_ops_nat[] __read_mostly = {
|
||||||
|
|
|
@ -30,10 +30,8 @@ static unsigned int
|
||||||
arptable_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
arptable_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net = dev_net(state->in ? state->in : state->out);
|
|
||||||
|
|
||||||
return arpt_do_table(skb, ops->hooknum, state,
|
return arpt_do_table(skb, ops->hooknum, state,
|
||||||
net->ipv4.arptable_filter);
|
state->net->ipv4.arptable_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *arpfilter_ops __read_mostly;
|
static struct nf_hook_ops *arpfilter_ops __read_mostly;
|
||||||
|
|
|
@ -246,7 +246,8 @@ get_chainname_rulenum(const struct ipt_entry *s, const struct ipt_entry *e,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trace_packet(const struct sk_buff *skb,
|
static void trace_packet(struct net *net,
|
||||||
|
const struct sk_buff *skb,
|
||||||
unsigned int hook,
|
unsigned int hook,
|
||||||
const struct net_device *in,
|
const struct net_device *in,
|
||||||
const struct net_device *out,
|
const struct net_device *out,
|
||||||
|
@ -258,7 +259,6 @@ static void trace_packet(const struct sk_buff *skb,
|
||||||
const char *hookname, *chainname, *comment;
|
const char *hookname, *chainname, *comment;
|
||||||
const struct ipt_entry *iter;
|
const struct ipt_entry *iter;
|
||||||
unsigned int rulenum = 0;
|
unsigned int rulenum = 0;
|
||||||
struct net *net = dev_net(in ? in : out);
|
|
||||||
|
|
||||||
root = get_entry(private->entries, private->hook_entry[hook]);
|
root = get_entry(private->entries, private->hook_entry[hook]);
|
||||||
|
|
||||||
|
@ -378,8 +378,8 @@ ipt_do_table(struct sk_buff *skb,
|
||||||
#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)
|
#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)
|
||||||
/* The packet is traced: log it */
|
/* The packet is traced: log it */
|
||||||
if (unlikely(skb->nf_trace))
|
if (unlikely(skb->nf_trace))
|
||||||
trace_packet(skb, hook, state->in, state->out,
|
trace_packet(state->net, skb, hook, state->in,
|
||||||
table->name, private, e);
|
state->out, table->name, private, e);
|
||||||
#endif
|
#endif
|
||||||
/* Standard target? */
|
/* Standard target? */
|
||||||
if (!t->u.kernel.target->target) {
|
if (!t->u.kernel.target->target) {
|
||||||
|
|
|
@ -514,7 +514,7 @@ arp_mangle(const struct nf_hook_ops *ops,
|
||||||
struct arphdr *arp = arp_hdr(skb);
|
struct arphdr *arp = arp_hdr(skb);
|
||||||
struct arp_payload *payload;
|
struct arp_payload *payload;
|
||||||
struct clusterip_config *c;
|
struct clusterip_config *c;
|
||||||
struct net *net = dev_net(state->in ? state->in : state->out);
|
struct net *net = state->net;
|
||||||
|
|
||||||
/* we don't care about non-ethernet and non-ipv4 ARP */
|
/* we don't care about non-ethernet and non-ipv4 ARP */
|
||||||
if (arp->ar_hrd != htons(ARPHRD_ETHER) ||
|
if (arp->ar_hrd != htons(ARPHRD_ETHER) ||
|
||||||
|
|
|
@ -303,7 +303,7 @@ static unsigned int ipv4_synproxy_hook(const struct nf_hook_ops *ops,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
const struct nf_hook_state *nhs)
|
const struct nf_hook_state *nhs)
|
||||||
{
|
{
|
||||||
struct synproxy_net *snet = synproxy_pernet(dev_net(nhs->in ? : nhs->out));
|
struct synproxy_net *snet = synproxy_pernet(nhs->net);
|
||||||
enum ip_conntrack_info ctinfo;
|
enum ip_conntrack_info ctinfo;
|
||||||
struct nf_conn *ct;
|
struct nf_conn *ct;
|
||||||
struct nf_conn_synproxy *synproxy;
|
struct nf_conn_synproxy *synproxy;
|
||||||
|
|
|
@ -36,16 +36,14 @@ static unsigned int
|
||||||
iptable_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
iptable_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net;
|
|
||||||
|
|
||||||
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
||||||
(skb->len < sizeof(struct iphdr) ||
|
(skb->len < sizeof(struct iphdr) ||
|
||||||
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
||||||
/* root is playing with raw sockets. */
|
/* root is playing with raw sockets. */
|
||||||
return NF_ACCEPT;
|
return NF_ACCEPT;
|
||||||
|
|
||||||
net = dev_net(state->in ? state->in : state->out);
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
return ipt_do_table(skb, ops->hooknum, state, net->ipv4.iptable_filter);
|
state->net->ipv4.iptable_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *filter_ops __read_mostly;
|
static struct nf_hook_ops *filter_ops __read_mostly;
|
||||||
|
|
|
@ -39,7 +39,6 @@ static const struct xt_table packet_mangler = {
|
||||||
static unsigned int
|
static unsigned int
|
||||||
ipt_mangle_out(struct sk_buff *skb, const struct nf_hook_state *state)
|
ipt_mangle_out(struct sk_buff *skb, const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
struct net_device *out = state->out;
|
|
||||||
unsigned int ret;
|
unsigned int ret;
|
||||||
const struct iphdr *iph;
|
const struct iphdr *iph;
|
||||||
u_int8_t tos;
|
u_int8_t tos;
|
||||||
|
@ -60,7 +59,7 @@ ipt_mangle_out(struct sk_buff *skb, const struct nf_hook_state *state)
|
||||||
tos = iph->tos;
|
tos = iph->tos;
|
||||||
|
|
||||||
ret = ipt_do_table(skb, NF_INET_LOCAL_OUT, state,
|
ret = ipt_do_table(skb, NF_INET_LOCAL_OUT, state,
|
||||||
dev_net(out)->ipv4.iptable_mangle);
|
state->net->ipv4.iptable_mangle);
|
||||||
/* Reroute for ANY change. */
|
/* Reroute for ANY change. */
|
||||||
if (ret != NF_DROP && ret != NF_STOLEN) {
|
if (ret != NF_DROP && ret != NF_STOLEN) {
|
||||||
iph = ip_hdr(skb);
|
iph = ip_hdr(skb);
|
||||||
|
@ -88,10 +87,10 @@ iptable_mangle_hook(const struct nf_hook_ops *ops,
|
||||||
return ipt_mangle_out(skb, state);
|
return ipt_mangle_out(skb, state);
|
||||||
if (ops->hooknum == NF_INET_POST_ROUTING)
|
if (ops->hooknum == NF_INET_POST_ROUTING)
|
||||||
return ipt_do_table(skb, ops->hooknum, state,
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
dev_net(state->out)->ipv4.iptable_mangle);
|
state->net->ipv4.iptable_mangle);
|
||||||
/* PREROUTING/INPUT/FORWARD: */
|
/* PREROUTING/INPUT/FORWARD: */
|
||||||
return ipt_do_table(skb, ops->hooknum, state,
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
dev_net(state->in)->ipv4.iptable_mangle);
|
state->net->ipv4.iptable_mangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *mangle_ops __read_mostly;
|
static struct nf_hook_ops *mangle_ops __read_mostly;
|
||||||
|
|
|
@ -33,9 +33,8 @@ static unsigned int iptable_nat_do_chain(const struct nf_hook_ops *ops,
|
||||||
const struct nf_hook_state *state,
|
const struct nf_hook_state *state,
|
||||||
struct nf_conn *ct)
|
struct nf_conn *ct)
|
||||||
{
|
{
|
||||||
struct net *net = nf_ct_net(ct);
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
|
state->net->ipv4.nat_table);
|
||||||
return ipt_do_table(skb, ops->hooknum, state, net->ipv4.nat_table);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int iptable_nat_ipv4_fn(const struct nf_hook_ops *ops,
|
static unsigned int iptable_nat_ipv4_fn(const struct nf_hook_ops *ops,
|
||||||
|
|
|
@ -23,16 +23,14 @@ static unsigned int
|
||||||
iptable_raw_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
iptable_raw_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net;
|
|
||||||
|
|
||||||
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
||||||
(skb->len < sizeof(struct iphdr) ||
|
(skb->len < sizeof(struct iphdr) ||
|
||||||
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
||||||
/* root is playing with raw sockets. */
|
/* root is playing with raw sockets. */
|
||||||
return NF_ACCEPT;
|
return NF_ACCEPT;
|
||||||
|
|
||||||
net = dev_net(state->in ? state->in : state->out);
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
return ipt_do_table(skb, ops->hooknum, state, net->ipv4.iptable_raw);
|
state->net->ipv4.iptable_raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *rawtable_ops __read_mostly;
|
static struct nf_hook_ops *rawtable_ops __read_mostly;
|
||||||
|
|
|
@ -40,17 +40,14 @@ static unsigned int
|
||||||
iptable_security_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
iptable_security_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net;
|
|
||||||
|
|
||||||
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
if (ops->hooknum == NF_INET_LOCAL_OUT &&
|
||||||
(skb->len < sizeof(struct iphdr) ||
|
(skb->len < sizeof(struct iphdr) ||
|
||||||
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
ip_hdrlen(skb) < sizeof(struct iphdr)))
|
||||||
/* Somebody is playing with raw sockets. */
|
/* Somebody is playing with raw sockets. */
|
||||||
return NF_ACCEPT;
|
return NF_ACCEPT;
|
||||||
|
|
||||||
net = dev_net(state->in ? state->in : state->out);
|
|
||||||
return ipt_do_table(skb, ops->hooknum, state,
|
return ipt_do_table(skb, ops->hooknum, state,
|
||||||
net->ipv4.iptable_security);
|
state->net->ipv4.iptable_security);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *sectbl_ops __read_mostly;
|
static struct nf_hook_ops *sectbl_ops __read_mostly;
|
||||||
|
|
|
@ -147,7 +147,7 @@ static unsigned int ipv4_conntrack_in(const struct nf_hook_ops *ops,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return nf_conntrack_in(dev_net(state->in), PF_INET, ops->hooknum, skb);
|
return nf_conntrack_in(state->net, PF_INET, ops->hooknum, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int ipv4_conntrack_local(const struct nf_hook_ops *ops,
|
static unsigned int ipv4_conntrack_local(const struct nf_hook_ops *ops,
|
||||||
|
@ -158,7 +158,7 @@ static unsigned int ipv4_conntrack_local(const struct nf_hook_ops *ops,
|
||||||
if (skb->len < sizeof(struct iphdr) ||
|
if (skb->len < sizeof(struct iphdr) ||
|
||||||
ip_hdrlen(skb) < sizeof(struct iphdr))
|
ip_hdrlen(skb) < sizeof(struct iphdr))
|
||||||
return NF_ACCEPT;
|
return NF_ACCEPT;
|
||||||
return nf_conntrack_in(dev_net(state->out), PF_INET, ops->hooknum, skb);
|
return nf_conntrack_in(state->net, PF_INET, ops->hooknum, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Connection tracking may drop packets, but never alters them, so
|
/* Connection tracking may drop packets, but never alters them, so
|
||||||
|
|
|
@ -275,7 +275,8 @@ get_chainname_rulenum(const struct ip6t_entry *s, const struct ip6t_entry *e,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void trace_packet(const struct sk_buff *skb,
|
static void trace_packet(struct net *net,
|
||||||
|
const struct sk_buff *skb,
|
||||||
unsigned int hook,
|
unsigned int hook,
|
||||||
const struct net_device *in,
|
const struct net_device *in,
|
||||||
const struct net_device *out,
|
const struct net_device *out,
|
||||||
|
@ -287,7 +288,6 @@ static void trace_packet(const struct sk_buff *skb,
|
||||||
const char *hookname, *chainname, *comment;
|
const char *hookname, *chainname, *comment;
|
||||||
const struct ip6t_entry *iter;
|
const struct ip6t_entry *iter;
|
||||||
unsigned int rulenum = 0;
|
unsigned int rulenum = 0;
|
||||||
struct net *net = dev_net(in ? in : out);
|
|
||||||
|
|
||||||
root = get_entry(private->entries, private->hook_entry[hook]);
|
root = get_entry(private->entries, private->hook_entry[hook]);
|
||||||
|
|
||||||
|
@ -401,8 +401,8 @@ ip6t_do_table(struct sk_buff *skb,
|
||||||
#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)
|
#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)
|
||||||
/* The packet is traced: log it */
|
/* The packet is traced: log it */
|
||||||
if (unlikely(skb->nf_trace))
|
if (unlikely(skb->nf_trace))
|
||||||
trace_packet(skb, hook, state->in, state->out,
|
trace_packet(state->net, skb, hook, state->in,
|
||||||
table->name, private, e);
|
state->out, table->name, private, e);
|
||||||
#endif
|
#endif
|
||||||
/* Standard target? */
|
/* Standard target? */
|
||||||
if (!t->u.kernel.target->target) {
|
if (!t->u.kernel.target->target) {
|
||||||
|
|
|
@ -320,7 +320,7 @@ static unsigned int ipv6_synproxy_hook(const struct nf_hook_ops *ops,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
const struct nf_hook_state *nhs)
|
const struct nf_hook_state *nhs)
|
||||||
{
|
{
|
||||||
struct synproxy_net *snet = synproxy_pernet(dev_net(nhs->in ? : nhs->out));
|
struct synproxy_net *snet = synproxy_pernet(nhs->net);
|
||||||
enum ip_conntrack_info ctinfo;
|
enum ip_conntrack_info ctinfo;
|
||||||
struct nf_conn *ct;
|
struct nf_conn *ct;
|
||||||
struct nf_conn_synproxy *synproxy;
|
struct nf_conn_synproxy *synproxy;
|
||||||
|
|
|
@ -35,9 +35,8 @@ static unsigned int
|
||||||
ip6table_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
ip6table_filter_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net = dev_net(state->in ? state->in : state->out);
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
|
state->net->ipv6.ip6table_filter);
|
||||||
return ip6t_do_table(skb, ops->hooknum, state, net->ipv6.ip6table_filter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *filter_ops __read_mostly;
|
static struct nf_hook_ops *filter_ops __read_mostly;
|
||||||
|
|
|
@ -58,7 +58,7 @@ ip6t_mangle_out(struct sk_buff *skb, const struct nf_hook_state *state)
|
||||||
flowlabel = *((u_int32_t *)ipv6_hdr(skb));
|
flowlabel = *((u_int32_t *)ipv6_hdr(skb));
|
||||||
|
|
||||||
ret = ip6t_do_table(skb, NF_INET_LOCAL_OUT, state,
|
ret = ip6t_do_table(skb, NF_INET_LOCAL_OUT, state,
|
||||||
dev_net(state->out)->ipv6.ip6table_mangle);
|
state->net->ipv6.ip6table_mangle);
|
||||||
|
|
||||||
if (ret != NF_DROP && ret != NF_STOLEN &&
|
if (ret != NF_DROP && ret != NF_STOLEN &&
|
||||||
(!ipv6_addr_equal(&ipv6_hdr(skb)->saddr, &saddr) ||
|
(!ipv6_addr_equal(&ipv6_hdr(skb)->saddr, &saddr) ||
|
||||||
|
@ -83,10 +83,10 @@ ip6table_mangle_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
return ip6t_mangle_out(skb, state);
|
return ip6t_mangle_out(skb, state);
|
||||||
if (ops->hooknum == NF_INET_POST_ROUTING)
|
if (ops->hooknum == NF_INET_POST_ROUTING)
|
||||||
return ip6t_do_table(skb, ops->hooknum, state,
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
dev_net(state->out)->ipv6.ip6table_mangle);
|
state->net->ipv6.ip6table_mangle);
|
||||||
/* INPUT/FORWARD */
|
/* INPUT/FORWARD */
|
||||||
return ip6t_do_table(skb, ops->hooknum, state,
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
dev_net(state->in)->ipv6.ip6table_mangle);
|
state->net->ipv6.ip6table_mangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *mangle_ops __read_mostly;
|
static struct nf_hook_ops *mangle_ops __read_mostly;
|
||||||
|
|
|
@ -35,9 +35,8 @@ static unsigned int ip6table_nat_do_chain(const struct nf_hook_ops *ops,
|
||||||
const struct nf_hook_state *state,
|
const struct nf_hook_state *state,
|
||||||
struct nf_conn *ct)
|
struct nf_conn *ct)
|
||||||
{
|
{
|
||||||
struct net *net = nf_ct_net(ct);
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
|
state->net->ipv6.ip6table_nat);
|
||||||
return ip6t_do_table(skb, ops->hooknum, state, net->ipv6.ip6table_nat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int ip6table_nat_fn(const struct nf_hook_ops *ops,
|
static unsigned int ip6table_nat_fn(const struct nf_hook_ops *ops,
|
||||||
|
|
|
@ -22,9 +22,8 @@ static unsigned int
|
||||||
ip6table_raw_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
ip6table_raw_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net = dev_net(state->in ? state->in : state->out);
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
|
state->net->ipv6.ip6table_raw);
|
||||||
return ip6t_do_table(skb, ops->hooknum, state, net->ipv6.ip6table_raw);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *rawtable_ops __read_mostly;
|
static struct nf_hook_ops *rawtable_ops __read_mostly;
|
||||||
|
|
|
@ -39,10 +39,8 @@ static unsigned int
|
||||||
ip6table_security_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
ip6table_security_hook(const struct nf_hook_ops *ops, struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
const struct net *net = dev_net(state->in ? state->in : state->out);
|
|
||||||
|
|
||||||
return ip6t_do_table(skb, ops->hooknum, state,
|
return ip6t_do_table(skb, ops->hooknum, state,
|
||||||
net->ipv6.ip6table_security);
|
state->net->ipv6.ip6table_security);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops *sectbl_ops __read_mostly;
|
static struct nf_hook_ops *sectbl_ops __read_mostly;
|
||||||
|
|
|
@ -169,7 +169,7 @@ static unsigned int ipv6_conntrack_in(const struct nf_hook_ops *ops,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
const struct nf_hook_state *state)
|
const struct nf_hook_state *state)
|
||||||
{
|
{
|
||||||
return nf_conntrack_in(dev_net(state->in), PF_INET6, ops->hooknum, skb);
|
return nf_conntrack_in(state->net, PF_INET6, ops->hooknum, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int ipv6_conntrack_local(const struct nf_hook_ops *ops,
|
static unsigned int ipv6_conntrack_local(const struct nf_hook_ops *ops,
|
||||||
|
@ -181,7 +181,7 @@ static unsigned int ipv6_conntrack_local(const struct nf_hook_ops *ops,
|
||||||
net_notice_ratelimited("ipv6_conntrack_local: packet too short\n");
|
net_notice_ratelimited("ipv6_conntrack_local: packet too short\n");
|
||||||
return NF_ACCEPT;
|
return NF_ACCEPT;
|
||||||
}
|
}
|
||||||
return nf_conntrack_in(dev_net(state->out), PF_INET6, ops->hooknum, skb);
|
return nf_conntrack_in(state->net, PF_INET6, ops->hooknum, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = {
|
static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = {
|
||||||
|
|
|
@ -670,8 +670,7 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum)
|
||||||
struct nfqnl_instance *queue;
|
struct nfqnl_instance *queue;
|
||||||
struct sk_buff *skb, *segs;
|
struct sk_buff *skb, *segs;
|
||||||
int err = -ENOBUFS;
|
int err = -ENOBUFS;
|
||||||
struct net *net = dev_net(entry->state.in ?
|
struct net *net = entry->state.net;
|
||||||
entry->state.in : entry->state.out);
|
|
||||||
struct nfnl_queue_net *q = nfnl_queue_pernet(net);
|
struct nfnl_queue_net *q = nfnl_queue_pernet(net);
|
||||||
|
|
||||||
/* rcu_read_lock()ed by nf_hook_slow() */
|
/* rcu_read_lock()ed by nf_hook_slow() */
|
||||||
|
|
Loading…
Reference in New Issue