netfilter: nat: Avoid ABI change in 4.9.63
authorBen Hutchings <ben@decadent.org.uk>
Thu, 16 Nov 2017 21:00:59 +0000 (21:00 +0000)
committerYves-Alexis Perez <corsac@debian.org>
Fri, 9 Feb 2018 12:58:52 +0000 (12:58 +0000)
Commit e1bf1687740c ("netfilter: nat: Revert "netfilter: nat: convert
nat bysrc hash to rhashtable") changed the type of
nf_conn::nat_bysource.  Thankfully the two types are the same size,
and nothing outside of nf_nat_core touches this field directly.  Hide
the change from genksyms but add compile-time assertions to make sure
that this isn't an ABI change.

Gbp-Pq: Topic debian
Gbp-Pq: Name netfilter-nat-avoid-abi-change-in-4.9.63.patch

include/net/netfilter/nf_conntrack.h
include/net/netfilter/nf_nat.h
net/netfilter/nf_nat_core.c

index 9ae819e27940e0b7652f69f8a26806317c07b387..f6bc7ed1b56c32c956edb993fad78430c1a3cfe2 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/bitops.h>
 #include <linux/compiler.h>
 #include <linux/atomic.h>
+#include <linux/rhashtable.h>
 
 #include <linux/netfilter/nf_conntrack_tcp.h>
 #include <linux/netfilter/nf_conntrack_dccp.h>
@@ -100,7 +101,11 @@ struct nf_conn {
        possible_net_t ct_net;
 
 #if IS_ENABLED(CONFIG_NF_NAT)
+#ifndef __GENKSYMS__
        struct hlist_node       nat_bysource;
+#else
+       struct rhlist_head      nat_bysource;
+#endif
 #endif
        /* all members below initialized via memset */
        u8 __nfct_init_offset[0];
index 02515f7ed4cceceeaa9eb974531e2ec342346d07..c327a431a6f38103598b82182d463dd728f70443 100644 (file)
@@ -1,5 +1,6 @@
 #ifndef _NF_NAT_H
 #define _NF_NAT_H
+#include <linux/rhashtable.h>
 #include <linux/netfilter_ipv4.h>
 #include <linux/netfilter/nf_nat.h>
 #include <net/netfilter/nf_conntrack_tuple.h>
index 624d6e4dcd5cf01d4be1ac51d57b2d1dba6a92e5..c07897e2f0d6d71b134541bb1582c1eeaa606307 100644 (file)
@@ -811,6 +811,11 @@ static int __init nf_nat_init(void)
 {
        int ret;
 
+       /* bwh: Assert that nat_bysource hasn't changed size or alignment */
+       BUILD_BUG_ON(sizeof(struct hlist_node) != sizeof(struct rhlist_head));
+       BUILD_BUG_ON(__alignof__(struct hlist_node) !=
+                    __alignof__(struct rhlist_head));
+
        /* Leave them the same for the moment. */
        nf_nat_htable_size = nf_conntrack_htable_size;