On Wed, Jun 26, 2019 at 11:47:50AM +0200, Fernando Fernandez Mancera wrote: > On 6/26/19 11:24 AM, Pablo Neira Ayuso wrote: [...] > >> + break; > >> +#if IS_ENABLED(CONFIG_IPV6) > >> + case NFPROTO_IPV6: > >> + err = nf_synproxy_ipv6_init(snet, ctx->net); > >> + if (err) > >> + goto nf_ct_failure; > >> + snet->hook_ref6++; > > > > Same here. > > > >> + break; > > > > #endif /* CONFIG_IPV6 */ > > > > Note that #endif should finish here, NFPROTO_INET and NFPROTO_BRIDGE > > should not be wrapper by this. > > > > finishes here. You can probably replace this to CONFIG_NF_TABLES_IPV6 > > as above, right? > > Yes. In this case we can replace it with CONFIG_NF_TABLES_IPV6. > > > > >> + case NFPROTO_INET: > >> + case NFPROTO_BRIDGE: > >> + err = nf_synproxy_ipv4_init(snet, ctx->net); > >> + if (err) > >> + goto nf_ct_failure; > > > > Missing ifdef. > > > >> + err = nf_synproxy_ipv6_init(snet, ctx->net); > >> + if (err) > >> + goto nf_ct_failure; > >> + snet->hook_ref4++; > >> + snet->hook_ref6++; > > > > Bumping refcnt manually? > > > >> + break; > >> +#endif > >> + } > >> + > >> + return 0; > >> + > >> +nf_ct_failure: > >> + nf_ct_netns_put(ctx->net, ctx->family); > >> + return err; > >> +} > >> + > >> +static void nft_synproxy_destroy(const struct nft_ctx *ctx, > >> + const struct nft_expr *expr) > >> +{ > >> + struct synproxy_net *snet = synproxy_pernet(ctx->net); > >> + > >> + switch (ctx->family) { > >> + case NFPROTO_IPV4: > >> + nf_synproxy_ipv4_fini(snet, ctx->net); > >> + break; > >> +#if IS_ENABLED(CONFIG_IPV6) > >> + case NFPROTO_IPV6: > >> + nf_synproxy_ipv6_fini(snet, ctx->net); > >> + break; > >> + case NFPROTO_INET: > >> + case NFPROTO_BRIDGE: > >> + nf_synproxy_ipv4_fini(snet, ctx->net); > > > > We should allow bridge to run only with IPv4, if CONFIG_IPV6 is unset. > > > > Just wrap this: > > > > #ifdef IS_ENABLED(...) > > > >> + nf_synproxy_ipv6_fini(snet, ctx->net); > > > > #endif > > > > Or there's another trick you can do, in the header file, you add: > > > > #ifdef IS_ENABLED(...) > > void nf_synproxy_ipv6_fini(..., ...); > > #else > > static inline void nf_synproxy_ipv6_fini(..., ...) {} > > #endid > > > > so we don't need this #ifdef in the code. > > > > If there is no problem to have an inline definition with an empty body > then this is a good trick to avoid the #ifdef. This is fine, but use this only from .h file. Thanks.