tree: https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git master head: f20fbc0717f9f007c94b2641134b19228d0ce9ed commit: e3b37f11e6e4e6b6f02cc762f182ce233d2c1c9d [43/54] netfilter: replace list_head with single linked list config: x86_64-randconfig-x014-09252039 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: git checkout e3b37f11e6e4e6b6f02cc762f182ce233d2c1c9d # save the attached .config to linux build tree make ARCH=x86_64 Note: the nf-next/master HEAD f20fbc0717f9f007c94b2641134b19228d0ce9ed builds fine. It only hurts bisectibility. All error/warnings (new ones prefixed by >>): In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from net/netfilter/core.c:10: net/netfilter/core.c: In function 'nf_set_hooks_head': >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:299:17: note: in definition of macro 'WRITE_ONCE' union { typeof(x) __val; char __c[1]; } __u = \ ^ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:300:30: note: in definition of macro 'WRITE_ONCE' { .__val = (__force typeof(x)) (val) }; \ ^ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:300:35: note: in definition of macro 'WRITE_ONCE' { .__val = (__force typeof(x)) (val) }; \ ^~~ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:301:22: note: in definition of macro 'WRITE_ONCE' __write_once_size(&(x), __u.__c, sizeof(x)); \ ^ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:301:42: note: in definition of macro 'WRITE_ONCE' __write_once_size(&(x), __u.__c, sizeof(x)); \ ^ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from net/netfilter/core.c:10: >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:471:19: note: in definition of macro '__compiletime_assert' bool __cond = !(condition); \ ^~~~~~~~~ include/linux/compiler.h:491:2: note: in expansion of macro '_compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ^~~~~~~~~~~~~~~~~~~ >> include/linux/compiler.h:494:2: note: in expansion of macro 'compiletime_assert' compiletime_assert(__native_word(t), \ ^~~~~~~~~~~~~~~~~~ >> include/linux/compiler.h:494:21: note: in expansion of macro '__native_word' compiletime_assert(__native_word(t), \ ^~~~~~~~~~~~~ >> include/asm-generic/barrier.h:181:2: note: in expansion of macro 'compiletime_assert_atomic_type' compiletime_assert_atomic_type(*p); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> include/linux/rcupdate.h:667:3: note: in expansion of macro 'smp_store_release' smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \ ^~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:3: note: in expansion of macro 'rcu_assign_pointer' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^~~~~~~~~~~~~~~~~~ >> net/netfilter/core.c:96:30: error: 'struct net_device' has no member named 'nf_hooks_ingress' rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); ^ include/linux/compiler.h:471:19: note: in definition of macro '__compiletime_assert' bool __cond = !(condition); \ ^~~~~~~~~ include/linux/compiler.h:491:2: note: in expansion of macro '_compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__) ^~~~~~~~~~~~~~~~~~~ >> include/linux/compiler.h:494:2: note: in expansion of macro 'compiletime_assert' compiletime_assert(__native_word(t), \ ^~~~~~~~~~~~~~~~~~ >> include/linux/compiler.h:494:21: note: in expansion of macro '__native_word' compiletime_assert(__native_word(t), \ ^~~~~~~~~~~~~ >> include/asm-generic/barrier.h:181:2: note: in expansion of macro 'compiletime_assert_atomic_type' compiletime_assert_atomic_type(*p); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +96 net/netfilter/core.c 4 * Thanks to Rob `CmdrTaco' Malda for not influencing this code in any 5 * way. 6 * 7 * Rusty Russell (C)2000 -- This code is GPL. 8 * Patrick McHardy (c) 2006-2012 9 */ > 10 #include <linux/kernel.h> 11 #include <linux/netfilter.h> 12 #include <net/protocol.h> 13 #include <linux/init.h> 14 #include <linux/skbuff.h> 15 #include <linux/wait.h> 16 #include <linux/module.h> 17 #include <linux/interrupt.h> 18 #include <linux/if.h> 19 #include <linux/netdevice.h> 20 #include <linux/netfilter_ipv6.h> 21 #include <linux/inetdevice.h> 22 #include <linux/proc_fs.h> 23 #include <linux/mutex.h> 24 #include <linux/slab.h> 25 #include <linux/rcupdate.h> 26 #include <net/net_namespace.h> 27 #include <net/sock.h> 28 29 #include "nf_internals.h" 30 31 static DEFINE_MUTEX(afinfo_mutex); 32 33 const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; 34 EXPORT_SYMBOL(nf_afinfo); 35 const struct nf_ipv6_ops __rcu *nf_ipv6_ops __read_mostly; 36 EXPORT_SYMBOL_GPL(nf_ipv6_ops); 37 38 DEFINE_PER_CPU(bool, nf_skb_duplicated); 39 EXPORT_SYMBOL_GPL(nf_skb_duplicated); 40 41 int nf_register_afinfo(const struct nf_afinfo *afinfo) 42 { 43 mutex_lock(&afinfo_mutex); 44 RCU_INIT_POINTER(nf_afinfo[afinfo->family], afinfo); 45 mutex_unlock(&afinfo_mutex); 46 return 0; 47 } 48 EXPORT_SYMBOL_GPL(nf_register_afinfo); 49 50 void nf_unregister_afinfo(const struct nf_afinfo *afinfo) 51 { 52 mutex_lock(&afinfo_mutex); 53 RCU_INIT_POINTER(nf_afinfo[afinfo->family], NULL); 54 mutex_unlock(&afinfo_mutex); 55 synchronize_rcu(); 56 } 57 EXPORT_SYMBOL_GPL(nf_unregister_afinfo); 58 59 #ifdef HAVE_JUMP_LABEL 60 struct static_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS]; 61 EXPORT_SYMBOL(nf_hooks_needed); 62 #endif 63 64 static DEFINE_MUTEX(nf_hook_mutex); 65 #define nf_entry_dereference(e) \ 66 rcu_dereference_protected(e, lockdep_is_held(&nf_hook_mutex)) 67 68 static struct nf_hook_entry *nf_hook_entry_head(struct net *net, 69 const struct nf_hook_ops *reg) 70 { 71 struct nf_hook_entry *hook_head = NULL; 72 73 if (reg->pf != NFPROTO_NETDEV) 74 hook_head = nf_entry_dereference(net->nf.hooks[reg->pf] 75 [reg->hooknum]); 76 else if (reg->hooknum == NF_NETDEV_INGRESS) { 77 #ifdef CONFIG_NETFILTER_INGRESS 78 if (reg->dev && dev_net(reg->dev) == net) 79 hook_head = 80 nf_entry_dereference( 81 reg->dev->nf_hooks_ingress); 82 #endif 83 } 84 return hook_head; 85 } 86 87 /* must hold nf_hook_mutex */ 88 static void nf_set_hooks_head(struct net *net, const struct nf_hook_ops *reg, 89 struct nf_hook_entry *entry) 90 { 91 switch (reg->pf) { 92 case NFPROTO_NETDEV: 93 /* We already checked in nf_register_net_hook() that this is 94 * used from ingress. 95 */ > 96 rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); 97 break; 98 default: 99 rcu_assign_pointer(net->nf.hooks[reg->pf][reg->hooknum], --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip