Commit 81e01647 authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso

netfilter: conntrack: fix IPV6=n builds

Stephen Rothwell reports:
 After merging the netfilter-next tree, today's linux-next build
 (powerpc ppc64_defconfig) failed like this:

 ERROR: "nf_conntrack_invert_icmpv6_tuple" [nf_conntrack.ko] undefined!
 ERROR: "nf_conntrack_icmpv6_packet" [nf_conntrack.ko] undefined!
 ERROR: "nf_conntrack_icmpv6_init_net" [nf_conntrack.ko] undefined!
 ERROR: "icmpv6_pkt_to_tuple" [nf_conntrack.ko] undefined!
 ERROR: "nf_ct_gre_keymap_destroy" [nf_conntrack.ko] undefined!

icmpv6 related errors are due to lack of IS_ENABLED(CONFIG_IPV6) (no
icmpv6 support is builtin if kernel has CONFIG_IPV6=n), the
nf_ct_gre_keymap_destroy error is due to lack of PROTO_GRE check.

Fixes: a47c5404 ("netfilter: conntrack: handle builtin l4proto packet functions via direct calls")
Fixes: e2e48b47 ("netfilter: conntrack: handle icmp pkt_to_tuple helper via direct calls")
Fixes: 197c4300 ("netfilter: conntrack: remove invert_tuple callback")
Fixes: 2a389de8 ("netfilter: conntrack: remove l4proto init and get_net callbacks")
Fixes: e5689435 ("netfilter: conntrack: remove l4proto destroy hook")
Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 0123a75e
...@@ -274,8 +274,10 @@ nf_ct_get_tuple(const struct sk_buff *skb, ...@@ -274,8 +274,10 @@ nf_ct_get_tuple(const struct sk_buff *skb,
tuple->dst.dir = IP_CT_DIR_ORIGINAL; tuple->dst.dir = IP_CT_DIR_ORIGINAL;
switch (protonum) { switch (protonum) {
#if IS_ENABLED(CONFIG_IPV6)
case IPPROTO_ICMPV6: case IPPROTO_ICMPV6:
return icmpv6_pkt_to_tuple(skb, dataoff, net, tuple); return icmpv6_pkt_to_tuple(skb, dataoff, net, tuple);
#endif
case IPPROTO_ICMP: case IPPROTO_ICMP:
return icmp_pkt_to_tuple(skb, dataoff, net, tuple); return icmp_pkt_to_tuple(skb, dataoff, net, tuple);
#ifdef CONFIG_NF_CT_PROTO_GRE #ifdef CONFIG_NF_CT_PROTO_GRE
...@@ -412,8 +414,10 @@ nf_ct_invert_tuple(struct nf_conntrack_tuple *inverse, ...@@ -412,8 +414,10 @@ nf_ct_invert_tuple(struct nf_conntrack_tuple *inverse,
switch (orig->dst.protonum) { switch (orig->dst.protonum) {
case IPPROTO_ICMP: case IPPROTO_ICMP:
return nf_conntrack_invert_icmp_tuple(inverse, orig); return nf_conntrack_invert_icmp_tuple(inverse, orig);
#if IS_ENABLED(CONFIG_IPV6)
case IPPROTO_ICMPV6: case IPPROTO_ICMPV6:
return nf_conntrack_invert_icmpv6_tuple(inverse, orig); return nf_conntrack_invert_icmpv6_tuple(inverse, orig);
#endif
} }
inverse->src.u.all = orig->dst.u.all; inverse->src.u.all = orig->dst.u.all;
...@@ -526,10 +530,12 @@ EXPORT_SYMBOL_GPL(nf_ct_tmpl_free); ...@@ -526,10 +530,12 @@ EXPORT_SYMBOL_GPL(nf_ct_tmpl_free);
static void destroy_gre_conntrack(struct nf_conn *ct) static void destroy_gre_conntrack(struct nf_conn *ct)
{ {
#ifdef CONFIG_NF_CT_PROTO_GRE
struct nf_conn *master = ct->master; struct nf_conn *master = ct->master;
if (master) if (master)
nf_ct_gre_keymap_destroy(master); nf_ct_gre_keymap_destroy(master);
#endif
} }
static void static void
...@@ -1553,8 +1559,10 @@ static int nf_conntrack_handle_packet(struct nf_conn *ct, ...@@ -1553,8 +1559,10 @@ static int nf_conntrack_handle_packet(struct nf_conn *ct,
ctinfo, state); ctinfo, state);
case IPPROTO_ICMP: case IPPROTO_ICMP:
return nf_conntrack_icmp_packet(ct, skb, ctinfo, state); return nf_conntrack_icmp_packet(ct, skb, ctinfo, state);
#if IS_ENABLED(CONFIG_IPV6)
case IPPROTO_ICMPV6: case IPPROTO_ICMPV6:
return nf_conntrack_icmpv6_packet(ct, skb, ctinfo, state); return nf_conntrack_icmpv6_packet(ct, skb, ctinfo, state);
#endif
#ifdef CONFIG_NF_CT_PROTO_UDPLITE #ifdef CONFIG_NF_CT_PROTO_UDPLITE
case IPPROTO_UDPLITE: case IPPROTO_UDPLITE:
return nf_conntrack_udplite_packet(ct, skb, dataoff, return nf_conntrack_udplite_packet(ct, skb, dataoff,
......
...@@ -597,7 +597,9 @@ void nf_conntrack_proto_pernet_init(struct net *net) ...@@ -597,7 +597,9 @@ void nf_conntrack_proto_pernet_init(struct net *net)
nf_conntrack_udp_init_net(net); nf_conntrack_udp_init_net(net);
nf_conntrack_tcp_init_net(net); nf_conntrack_tcp_init_net(net);
nf_conntrack_icmp_init_net(net); nf_conntrack_icmp_init_net(net);
#if IS_ENABLED(CONFIG_IPV6)
nf_conntrack_icmpv6_init_net(net); nf_conntrack_icmpv6_init_net(net);
#endif
#ifdef CONFIG_NF_CT_PROTO_DCCP #ifdef CONFIG_NF_CT_PROTO_DCCP
nf_conntrack_dccp_init_net(net); nf_conntrack_dccp_init_net(net);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment