netfilter: nft_hash: get random bytes if seed is not specified
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 3 Nov 2016 16:52:19 +0000 (17:52 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 9 Nov 2016 22:41:09 +0000 (23:41 +0100)
If the user doesn't specify a seed, generate one at configuration time.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nft_hash.c

index baf694de3935a29561d513a56dbd3c8f8690e196..97ad8e30e4b4be497edea40468a047c20a165ea0 100644 (file)
@@ -57,7 +57,6 @@ static int nft_hash_init(const struct nft_ctx *ctx,
        if (!tb[NFTA_HASH_SREG] ||
            !tb[NFTA_HASH_DREG] ||
            !tb[NFTA_HASH_LEN]  ||
-           !tb[NFTA_HASH_SEED] ||
            !tb[NFTA_HASH_MODULUS])
                return -EINVAL;
 
@@ -80,7 +79,10 @@ static int nft_hash_init(const struct nft_ctx *ctx,
        if (priv->offset + priv->modulus - 1 < priv->offset)
                return -EOVERFLOW;
 
-       priv->seed = ntohl(nla_get_be32(tb[NFTA_HASH_SEED]));
+       if (tb[NFTA_HASH_SEED])
+               priv->seed = ntohl(nla_get_be32(tb[NFTA_HASH_SEED]));
+       else
+               get_random_bytes(&priv->seed, sizeof(priv->seed));
 
        return nft_validate_register_load(priv->sreg, len) &&
               nft_validate_register_store(ctx, priv->dreg, NULL,