netfilter: nft_dynset: relax superfluous check on set updates
authorPablo Neira Ayuso <pablo@netfilter.org>
Sat, 25 Sep 2021 20:40:26 +0000 (22:40 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:16:30 +0000 (19:16 +0100)
[ Upstream commit 7b1394892de8d95748d05e3ee41e85edb4abbfa1 ]

Relax this condition to make add and update commands idempotent for sets
with no timeout. The eval function already checks if the set element
timeout is available and updates it if the update command is used.

Fixes: 22fe54d5fefc ("netfilter: nf_tables: add support for dynamic set updates")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/netfilter/nft_dynset.c

index 6ba3256fa844989461b28af793e7465a40353f17..87f3af4645d9c75697b95adc7ad0a2c2fd01d593 100644 (file)
@@ -198,17 +198,8 @@ static int nft_dynset_init(const struct nft_ctx *ctx,
                return -EBUSY;
 
        priv->op = ntohl(nla_get_be32(tb[NFTA_DYNSET_OP]));
-       switch (priv->op) {
-       case NFT_DYNSET_OP_ADD:
-       case NFT_DYNSET_OP_DELETE:
-               break;
-       case NFT_DYNSET_OP_UPDATE:
-               if (!(set->flags & NFT_SET_TIMEOUT))
-                       return -EOPNOTSUPP;
-               break;
-       default:
+       if (priv->op > NFT_DYNSET_OP_DELETE)
                return -EOPNOTSUPP;
-       }
 
        timeout = 0;
        if (tb[NFTA_DYNSET_TIMEOUT] != NULL) {