]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
netfilter: conntrack: avoid calls to l4proto invert_tuple
authorFlorian Westphal <fw@strlen.de>
Fri, 29 Jun 2018 05:46:48 +0000 (07:46 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 16 Jul 2018 15:55:00 +0000 (17:55 +0200)
Handle the common cases (tcp, udp, etc). in the core and only
do the indirect call for the protocols that need it (GRE for instance).

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack_l4proto.h
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_conntrack_proto_dccp.c
net/netfilter/nf_conntrack_proto_generic.c
net/netfilter/nf_conntrack_proto_gre.c
net/netfilter/nf_conntrack_proto_sctp.c
net/netfilter/nf_conntrack_proto_tcp.c
net/netfilter/nf_conntrack_proto_udp.c

index a7220eef9aeed424357e5439622368f5dd4dc845..6a55e337a1614cd6e2ff89d0c753ccab48fa2f09 100644 (file)
@@ -36,7 +36,7 @@ struct nf_conntrack_l4proto {
                             struct net *net, struct nf_conntrack_tuple *tuple);
 
        /* Invert the per-proto part of the tuple: ie. turn xmit into reply.
-        * Some packets can't be inverted: return 0 in that case.
+        * Only used by icmp, most protocols use a generic version.
         */
        bool (*invert_tuple)(struct nf_conntrack_tuple *inverse,
                             const struct nf_conntrack_tuple *orig);
index 0674c6e5bfed471947583d243c4fb59890abc14f..92efce69b690d5c46296919e66ae4846b8224806 100644 (file)
@@ -400,7 +400,13 @@ nf_ct_invert_tuple(struct nf_conntrack_tuple *inverse,
        inverse->dst.dir = !orig->dst.dir;
 
        inverse->dst.protonum = orig->dst.protonum;
-       return l4proto->invert_tuple(inverse, orig);
+
+       if (unlikely(l4proto->invert_tuple))
+               return l4proto->invert_tuple(inverse, orig);
+
+       inverse->src.u.all = orig->dst.u.all;
+       inverse->dst.u.all = orig->src.u.all;
+       return true;
 }
 EXPORT_SYMBOL_GPL(nf_ct_invert_tuple);
 
index abe647d5b8c63256da8895388363ad9dde11edc0..05620c03f1384137a3debd516111b1a966e73fb2 100644 (file)
@@ -403,14 +403,6 @@ static bool dccp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
        return true;
 }
 
-static bool dccp_invert_tuple(struct nf_conntrack_tuple *inv,
-                             const struct nf_conntrack_tuple *tuple)
-{
-       inv->src.u.dccp.port = tuple->dst.u.dccp.port;
-       inv->dst.u.dccp.port = tuple->src.u.dccp.port;
-       return true;
-}
-
 static bool dccp_new(struct nf_conn *ct, const struct sk_buff *skb,
                     unsigned int dataoff, unsigned int *timeouts)
 {
@@ -865,7 +857,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp4 = {
        .l3proto                = AF_INET,
        .l4proto                = IPPROTO_DCCP,
        .pkt_to_tuple           = dccp_pkt_to_tuple,
-       .invert_tuple           = dccp_invert_tuple,
        .new                    = dccp_new,
        .packet                 = dccp_packet,
        .get_timeouts           = dccp_get_timeouts,
@@ -901,7 +892,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_dccp6 = {
        .l3proto                = AF_INET6,
        .l4proto                = IPPROTO_DCCP,
        .pkt_to_tuple           = dccp_pkt_to_tuple,
-       .invert_tuple           = dccp_invert_tuple,
        .new                    = dccp_new,
        .packet                 = dccp_packet,
        .get_timeouts           = dccp_get_timeouts,
index 6c6896d21cd738f8ea680f9db4c0c7225354e711..4dfe40aa9446ff91817ffae2dcbb8ebb31e165ad 100644 (file)
@@ -41,15 +41,6 @@ static bool generic_pkt_to_tuple(const struct sk_buff *skb,
        return true;
 }
 
-static bool generic_invert_tuple(struct nf_conntrack_tuple *tuple,
-                                const struct nf_conntrack_tuple *orig)
-{
-       tuple->src.u.all = 0;
-       tuple->dst.u.all = 0;
-
-       return true;
-}
-
 static unsigned int *generic_get_timeouts(struct net *net)
 {
        return &(generic_pernet(net)->timeout);
@@ -168,7 +159,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_generic =
        .l3proto                = PF_UNSPEC,
        .l4proto                = 255,
        .pkt_to_tuple           = generic_pkt_to_tuple,
-       .invert_tuple           = generic_invert_tuple,
        .packet                 = generic_packet,
        .get_timeouts           = generic_get_timeouts,
        .new                    = generic_new,
index d049ea5a3770df595f49511cd4ad96eb1195ca00..0bd40eb06b55865b3a51cdb1862c04988ccd0d4c 100644 (file)
@@ -179,15 +179,6 @@ EXPORT_SYMBOL_GPL(nf_ct_gre_keymap_destroy);
 
 /* PUBLIC CONNTRACK PROTO HELPER FUNCTIONS */
 
-/* invert gre part of tuple */
-static bool gre_invert_tuple(struct nf_conntrack_tuple *tuple,
-                            const struct nf_conntrack_tuple *orig)
-{
-       tuple->dst.u.gre.key = orig->src.u.gre.key;
-       tuple->src.u.gre.key = orig->dst.u.gre.key;
-       return true;
-}
-
 /* gre hdr info to tuple */
 static bool gre_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
                             struct net *net, struct nf_conntrack_tuple *tuple)
@@ -356,7 +347,6 @@ static const struct nf_conntrack_l4proto nf_conntrack_l4proto_gre4 = {
        .l3proto         = AF_INET,
        .l4proto         = IPPROTO_GRE,
        .pkt_to_tuple    = gre_pkt_to_tuple,
-       .invert_tuple    = gre_invert_tuple,
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
        .print_conntrack = gre_print_conntrack,
 #endif
index fb9a35d1606996897c527be85afae52481edc16b..148957a5cf3ee3e1e90b6b4d4c29f93134a2b44e 100644 (file)
@@ -166,14 +166,6 @@ static bool sctp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
        return true;
 }
 
-static bool sctp_invert_tuple(struct nf_conntrack_tuple *tuple,
-                             const struct nf_conntrack_tuple *orig)
-{
-       tuple->src.u.sctp.port = orig->dst.u.sctp.port;
-       tuple->dst.u.sctp.port = orig->src.u.sctp.port;
-       return true;
-}
-
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
 /* Print out the private part of the conntrack. */
 static void sctp_print_conntrack(struct seq_file *s, struct nf_conn *ct)
@@ -781,7 +773,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 = {
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_SCTP,
        .pkt_to_tuple           = sctp_pkt_to_tuple,
-       .invert_tuple           = sctp_invert_tuple,
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
        .print_conntrack        = sctp_print_conntrack,
 #endif
@@ -818,7 +809,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp6 = {
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_SCTP,
        .pkt_to_tuple           = sctp_pkt_to_tuple,
-       .invert_tuple           = sctp_invert_tuple,
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
        .print_conntrack        = sctp_print_conntrack,
 #endif
index 8e67910185a05717628837d34c7e4fe829ca7424..03cff1e3066a0df03150093e80323318c291a334 100644 (file)
@@ -293,14 +293,6 @@ static bool tcp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
        return true;
 }
 
-static bool tcp_invert_tuple(struct nf_conntrack_tuple *tuple,
-                            const struct nf_conntrack_tuple *orig)
-{
-       tuple->src.u.tcp.port = orig->dst.u.tcp.port;
-       tuple->dst.u.tcp.port = orig->src.u.tcp.port;
-       return true;
-}
-
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
 /* Print out the private part of the conntrack. */
 static void tcp_print_conntrack(struct seq_file *s, struct nf_conn *ct)
@@ -1560,7 +1552,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp4 =
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_TCP,
        .pkt_to_tuple           = tcp_pkt_to_tuple,
-       .invert_tuple           = tcp_invert_tuple,
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
        .print_conntrack        = tcp_print_conntrack,
 #endif
@@ -1598,7 +1589,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_tcp6 =
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_TCP,
        .pkt_to_tuple           = tcp_pkt_to_tuple,
-       .invert_tuple           = tcp_invert_tuple,
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
        .print_conntrack        = tcp_print_conntrack,
 #endif
index fe7243970aa454c88c68c6e16eaeea09ec012f81..6fe2233c323aa5f93cb1ab7f59fbff5258392f98 100644 (file)
@@ -55,14 +55,6 @@ static bool udp_pkt_to_tuple(const struct sk_buff *skb,
        return true;
 }
 
-static bool udp_invert_tuple(struct nf_conntrack_tuple *tuple,
-                            const struct nf_conntrack_tuple *orig)
-{
-       tuple->src.u.udp.port = orig->dst.u.udp.port;
-       tuple->dst.u.udp.port = orig->src.u.udp.port;
-       return true;
-}
-
 static unsigned int *udp_get_timeouts(struct net *net)
 {
        return udp_pernet(net)->timeouts;
@@ -302,7 +294,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_udp4 =
        .l4proto                = IPPROTO_UDP,
        .allow_clash            = true,
        .pkt_to_tuple           = udp_pkt_to_tuple,
-       .invert_tuple           = udp_invert_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,
@@ -334,7 +325,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite4 =
        .l4proto                = IPPROTO_UDPLITE,
        .allow_clash            = true,
        .pkt_to_tuple           = udp_pkt_to_tuple,
-       .invert_tuple           = udp_invert_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,
@@ -366,7 +356,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_udp6 =
        .l4proto                = IPPROTO_UDP,
        .allow_clash            = true,
        .pkt_to_tuple           = udp_pkt_to_tuple,
-       .invert_tuple           = udp_invert_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,
@@ -398,7 +387,6 @@ const struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite6 =
        .l4proto                = IPPROTO_UDPLITE,
        .allow_clash            = true,
        .pkt_to_tuple           = udp_pkt_to_tuple,
-       .invert_tuple           = udp_invert_tuple,
        .packet                 = udp_packet,
        .get_timeouts           = udp_get_timeouts,
        .new                    = udp_new,