summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2018-03-14 13:37:58 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2018-03-20 13:52:10 +0100
commit4f2921ca21b71a9faaecd84a9fc74401d3a8d275 (patch)
treee3c2affba1eb701a8bedd90df150bd22034286fa /kernel
parent36fe095606f881e6a3c7f9283c986aec6083f3e6 (diff)
downloadlinux-stable-4f2921ca21b71a9faaecd84a9fc74401d3a8d275.tar.gz
linux-stable-4f2921ca21b71a9faaecd84a9fc74401d3a8d275.tar.bz2
linux-stable-4f2921ca21b71a9faaecd84a9fc74401d3a8d275.zip
netfilter: nf_tables: meter: pick a set backend that supports updates
in nftables, 'meter' can be used to instantiate a hash-table at run time: rule add filter forward iif "internal" meter hostacct { ip saddr counter} nft list meter ip filter hostacct table ip filter { meter hostacct { type ipv4_addr elements = { 192.168.0.1 : counter packets 8 bytes 2672, .. because elemets get added on the fly, the kernel must chose a set backend type that implements the ->update() function, otherwise rule insertion fails with EOPNOTSUPP. Therefore, skip set types that lack ->update, and also make sure we do not discard a (bad) candidate when we did yet find any candidate at all. This could happen when userspace prefers low memory footprint -- the set implementation currently checked might not be a fit at all. Make sure we pick it anyway (!bops). In case next candidate is a better fix, it will be chosen instead. But in case nothing else is found we at least have a non-ideal match rather than no match at all. Fixes: 6c03ae210ce3 ("netfilter: nft_set_hash: add non-resizable hashtable implementation") Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions