mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
netfilter: nf_tables: make nft_set_do_lookup available unconditionally
This function was added for retpoline mitigation and is replaced by a static inline helper if mitigations are not enabled. Enable this helper function unconditionally so next patch can add a lookup restart mechanism to fix possible false negatives while transactions are in progress. Adding lookup restarts in nft_lookup_eval doesn't work as nft_objref would then need the same copypaste loop. This patch is separate to ease review of the actual bug fix. Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
parent
64102d9bbc
commit
11fe5a82e5
2 changed files with 14 additions and 13 deletions
|
@ -109,17 +109,11 @@ nft_hash_lookup_fast(const struct net *net, const struct nft_set *set,
|
|||
const struct nft_set_ext *
|
||||
nft_hash_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key);
|
||||
#endif
|
||||
|
||||
const struct nft_set_ext *
|
||||
nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key);
|
||||
#else
|
||||
static inline const struct nft_set_ext *
|
||||
nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key)
|
||||
{
|
||||
return set->ops->lookup(net, set, key);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* called from nft_pipapo_avx2.c */
|
||||
const struct nft_set_ext *
|
||||
|
|
|
@ -24,11 +24,11 @@ struct nft_lookup {
|
|||
struct nft_set_binding binding;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MITIGATION_RETPOLINE
|
||||
const struct nft_set_ext *
|
||||
nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key)
|
||||
static const struct nft_set_ext *
|
||||
__nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key)
|
||||
{
|
||||
#ifdef CONFIG_MITIGATION_RETPOLINE
|
||||
if (set->ops == &nft_set_hash_fast_type.ops)
|
||||
return nft_hash_lookup_fast(net, set, key);
|
||||
if (set->ops == &nft_set_hash_type.ops)
|
||||
|
@ -51,10 +51,17 @@ nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
|||
return nft_rbtree_lookup(net, set, key);
|
||||
|
||||
WARN_ON_ONCE(1);
|
||||
#endif
|
||||
return set->ops->lookup(net, set, key);
|
||||
}
|
||||
|
||||
const struct nft_set_ext *
|
||||
nft_set_do_lookup(const struct net *net, const struct nft_set *set,
|
||||
const u32 *key)
|
||||
{
|
||||
return __nft_set_do_lookup(net, set, key);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nft_set_do_lookup);
|
||||
#endif
|
||||
|
||||
void nft_lookup_eval(const struct nft_expr *expr,
|
||||
struct nft_regs *regs,
|
||||
|
|
Loading…
Add table
Reference in a new issue