2016-10-22 18:51 GMT+08:00 Liping Zhang <zlpnobody@xxxxxxx>: > From: Liping Zhang <zlpnobody@xxxxxxxxx> > > When CONFIG_NFT_SET_HASH is not enabled and I input the following rule: > "nft add rule filter output flow table test {ip daddr counter }", kernel > panic happened on my system: > BUG: unable to handle kernel NULL pointer dereference at (null) > --- > net/netfilter/nft_dynset.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/net/netfilter/nft_dynset.c b/net/netfilter/nft_dynset.c > index e3b83c3..6a631cb 100644 > --- a/net/netfilter/nft_dynset.c > +++ b/net/netfilter/nft_dynset.c > @@ -139,6 +139,9 @@ static int nft_dynset_init(const struct nft_ctx *ctx, > return PTR_ERR(set); > } > > + if (set->ops->update == NULL) > + return -EOPNOTSUPP; > + Maybe it's better to treat the NFT_SET_EVAL as features, I will send V2 latter: diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index b70d3ea..8a39b2a 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -2350,7 +2350,8 @@ nft_select_set_ops(const struct nlattr * const nla[], features = 0; if (nla[NFTA_SET_FLAGS] != NULL) { features = ntohl(nla_get_be32(nla[NFTA_SET_FLAGS])); - features &= NFT_SET_INTERVAL | NFT_SET_MAP | NFT_SET_TIMEOUT; + features &= NFT_SET_INTERVAL | NFT_SET_MAP | NFT_SET_TIMEOUT | + NFT_SET_EVAL; } bops = NULL; diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c index 3794cb2..328d23c 100644 --- a/net/netfilter/nft_set_hash.c +++ b/net/netfilter/nft_set_hash.c @@ -382,7 +382,7 @@ static struct nft_set_ops nft_hash_ops __read_mostly = { .lookup = nft_hash_lookup, .update = nft_hash_update, .walk = nft_hash_walk, - .features = NFT_SET_MAP | NFT_SET_TIMEOUT, + .features = NFT_SET_MAP | NFT_SET_TIMEOUT | NFT_SET_EVAL, .owner = THIS_MODULE, }; -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html