Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netfilter: bridge: make NF_TABLES_BRIDGE tristate

The new nft_meta_bridge code fails to link as built-in when NF_TABLES
is a loadable module.

net/bridge/netfilter/nft_meta_bridge.o: In function `nft_meta_bridge_get_eval':
nft_meta_bridge.c:(.text+0x1e8): undefined reference to `nft_meta_get_eval'
net/bridge/netfilter/nft_meta_bridge.o: In function `nft_meta_bridge_get_init':
nft_meta_bridge.c:(.text+0x468): undefined reference to `nft_meta_get_init'
nft_meta_bridge.c:(.text+0x49c): undefined reference to `nft_parse_register'
nft_meta_bridge.c:(.text+0x4cc): undefined reference to `nft_validate_register_store'
net/bridge/netfilter/nft_meta_bridge.o: In function `nft_meta_bridge_module_exit':
nft_meta_bridge.c:(.exit.text+0x14): undefined reference to `nft_unregister_expr'
net/bridge/netfilter/nft_meta_bridge.o: In function `nft_meta_bridge_module_init':
nft_meta_bridge.c:(.init.text+0x14): undefined reference to `nft_register_expr'
net/bridge/netfilter/nft_meta_bridge.o:(.rodata+0x60): undefined reference to `nft_meta_get_dump'
net/bridge/netfilter/nft_meta_bridge.o:(.rodata+0x88): undefined reference to `nft_meta_set_eval'

This can happen because the NF_TABLES_BRIDGE dependency itself is just a
'bool'. Make the symbol a 'tristate' instead so Kconfig can propagate the
dependencies correctly.

Fixes: 30e103fe24de ("netfilter: nft_meta: move bridge meta keys into nft_meta_bridge")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

authored by

Arnd Bergmann and committed by
Pablo Neira Ayuso
dfee0e99 fc2f14f8

+3 -3
+1 -1
net/bridge/netfilter/Kconfig
··· 6 6 menuconfig NF_TABLES_BRIDGE 7 7 depends on BRIDGE && NETFILTER && NF_TABLES 8 8 select NETFILTER_FAMILY_BRIDGE 9 - bool "Ethernet Bridge nf_tables support" 9 + tristate "Ethernet Bridge nf_tables support" 10 10 11 11 if NF_TABLES_BRIDGE 12 12
+1 -1
net/netfilter/nft_chain_filter.c
··· 193 193 static inline void nft_chain_filter_inet_fini(void) {} 194 194 #endif /* CONFIG_NF_TABLES_IPV6 */ 195 195 196 - #ifdef CONFIG_NF_TABLES_BRIDGE 196 + #if IS_ENABLED(CONFIG_NF_TABLES_BRIDGE) 197 197 static unsigned int 198 198 nft_do_chain_bridge(void *priv, 199 199 struct sk_buff *skb,
+1 -1
net/netfilter/nft_meta.c
··· 546 546 if (tb[NFTA_META_DREG] && tb[NFTA_META_SREG]) 547 547 return ERR_PTR(-EINVAL); 548 548 549 - #if defined(CONFIG_NF_TABLES_BRIDGE) && IS_MODULE(CONFIG_NFT_BRIDGE_META) 549 + #if IS_ENABLED(CONFIG_NF_TABLES_BRIDGE) && IS_MODULE(CONFIG_NFT_BRIDGE_META) 550 550 if (ctx->family == NFPROTO_BRIDGE) 551 551 return ERR_PTR(-EAGAIN); 552 552 #endif