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

netfilter: nf_tables: validate NFT_SET_ELEM_INTERVAL_END

Only NFTA_SET_ELEM_KEY and NFTA_SET_ELEM_FLAGS make sense for elements
whose NFT_SET_ELEM_INTERVAL_END flag is set on.

Fixes: 96518518cc41 ("netfilter: add nftables")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

+9 -3
+9 -3
net/netfilter/nf_tables_api.c
··· 4756 4756 if (nla[NFTA_SET_ELEM_DATA] == NULL && 4757 4757 !(flags & NFT_SET_ELEM_INTERVAL_END)) 4758 4758 return -EINVAL; 4759 - if (nla[NFTA_SET_ELEM_DATA] != NULL && 4760 - flags & NFT_SET_ELEM_INTERVAL_END) 4761 - return -EINVAL; 4762 4759 } else { 4763 4760 if (nla[NFTA_SET_ELEM_DATA] != NULL) 4764 4761 return -EINVAL; 4765 4762 } 4763 + 4764 + if ((flags & NFT_SET_ELEM_INTERVAL_END) && 4765 + (nla[NFTA_SET_ELEM_DATA] || 4766 + nla[NFTA_SET_ELEM_OBJREF] || 4767 + nla[NFTA_SET_ELEM_TIMEOUT] || 4768 + nla[NFTA_SET_ELEM_EXPIRATION] || 4769 + nla[NFTA_SET_ELEM_USERDATA] || 4770 + nla[NFTA_SET_ELEM_EXPR])) 4771 + return -EINVAL; 4766 4772 4767 4773 timeout = 0; 4768 4774 if (nla[NFTA_SET_ELEM_TIMEOUT] != NULL) {