Commit d9583cdf authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso

netfilter: nf_tables: report EOPNOTSUPP on unsupported flags/object type

EINVAL should be used for malformed netlink messages. New userspace
utility and old kernels might easily result in EINVAL when exercising
new set features, which is misleading.

Fixes: 8aeff920 ("netfilter: nf_tables: add stateful object reference to set elements")
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent b135fc08
...@@ -3963,7 +3963,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, ...@@ -3963,7 +3963,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk,
NFT_SET_INTERVAL | NFT_SET_TIMEOUT | NFT_SET_INTERVAL | NFT_SET_TIMEOUT |
NFT_SET_MAP | NFT_SET_EVAL | NFT_SET_MAP | NFT_SET_EVAL |
NFT_SET_OBJECT)) NFT_SET_OBJECT))
return -EINVAL; return -EOPNOTSUPP;
/* Only one of these operations is supported */ /* Only one of these operations is supported */
if ((flags & (NFT_SET_MAP | NFT_SET_OBJECT)) == if ((flags & (NFT_SET_MAP | NFT_SET_OBJECT)) ==
(NFT_SET_MAP | NFT_SET_OBJECT)) (NFT_SET_MAP | NFT_SET_OBJECT))
...@@ -4001,7 +4001,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk, ...@@ -4001,7 +4001,7 @@ static int nf_tables_newset(struct net *net, struct sock *nlsk,
objtype = ntohl(nla_get_be32(nla[NFTA_SET_OBJ_TYPE])); objtype = ntohl(nla_get_be32(nla[NFTA_SET_OBJ_TYPE]));
if (objtype == NFT_OBJECT_UNSPEC || if (objtype == NFT_OBJECT_UNSPEC ||
objtype > NFT_OBJECT_MAX) objtype > NFT_OBJECT_MAX)
return -EINVAL; return -EOPNOTSUPP;
} else if (flags & NFT_SET_OBJECT) } else if (flags & NFT_SET_OBJECT)
return -EINVAL; return -EINVAL;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment