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

netfilter: xt_hashlimit: use _ALL macro to reject unknown flag bits

David Miller says:
The canonical way to validate if the set bits are in a valid
range is to have a "_ALL" macro, and test:
if (val & ~XT_HASHLIMIT_ALL)
goto err;"

make it so.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

authored by

Florian Westphal and committed by
Pablo Neira Ayuso
1f27e251 6d8823db

+6 -4
+5 -3
include/linux/netfilter/xt_hashlimit.h
··· 22 22 XT_HASHLIMIT_HASH_SPT = 1 << 3, 23 23 XT_HASHLIMIT_INVERT = 1 << 4, 24 24 XT_HASHLIMIT_BYTES = 1 << 5, 25 - #ifdef __KERNEL__ 26 - XT_HASHLIMIT_MAX = 1 << 6, 27 - #endif 28 25 }; 26 + #ifdef __KERNEL__ 27 + #define XT_HASHLIMIT_ALL (XT_HASHLIMIT_HASH_DIP | XT_HASHLIMIT_HASH_DPT | \ 28 + XT_HASHLIMIT_HASH_SIP | XT_HASHLIMIT_HASH_SPT | \ 29 + XT_HASHLIMIT_INVERT | XT_HASHLIMIT_BYTES) 30 + #endif 29 31 30 32 struct hashlimit_cfg { 31 33 __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */
+1 -1
net/netfilter/xt_hashlimit.c
··· 647 647 return -EINVAL; 648 648 } 649 649 650 - if (info->cfg.mode >= XT_HASHLIMIT_MAX) { 650 + if (info->cfg.mode & ~XT_HASHLIMIT_ALL) { 651 651 pr_info("Unknown mode mask %X, kernel too old?\n", 652 652 info->cfg.mode); 653 653 return -EINVAL;