]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: af_alg - zero initialize memory allocated via sock_kmalloc
authorShivani Agarwal <shivani.agarwal@broadcom.com>
Wed, 31 Dec 2025 20:41:40 +0000 (15:41 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2026 12:12:04 +0000 (13:12 +0100)
[ Upstream commit 6f6e309328d53a10c0fe1f77dec2db73373179b6 ]

Several crypto user API contexts and requests allocated with
sock_kmalloc() were left uninitialized, relying on callers to
set fields explicitly. This resulted in the use of uninitialized
data in certain error paths or when new fields are added in the
future.

The ACVP patches also contain two user-space interface files:
algif_kpp.c and algif_akcipher.c. These too rely on proper
initialization of their context structures.

A particular issue has been observed with the newly added
'inflight' variable introduced in af_alg_ctx by commit:

  67b164a871af ("crypto: af_alg - Disallow multiple in-flight AIO requests")

Because the context is not memset to zero after allocation,
the inflight variable has contained garbage values. As a result,
af_alg_alloc_areq() has incorrectly returned -EBUSY randomly when
the garbage value was interpreted as true:

  https://github.com/gregkh/linux/blame/master/crypto/af_alg.c#L1209

The check directly tests ctx->inflight without explicitly
comparing against true/false. Since inflight is only ever set to
true or false later, an uninitialized value has triggered
-EBUSY failures. Zero-initializing memory allocated with
sock_kmalloc() ensures inflight and other fields start in a known
state, removing random issues caused by uninitialized data.

Fixes: fe869cdb89c9 ("crypto: algif_hash - User-space interface for hash operations")
Fixes: 5afdfd22e6ba ("crypto: algif_rng - add random number generator support")
Fixes: 2d97591ef43d ("crypto: af_alg - consolidation of duplicate code")
Fixes: 67b164a871af ("crypto: af_alg - Disallow multiple in-flight AIO requests")
Cc: stable@vger.kernel.org
Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
[ Adjust context ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
crypto/af_alg.c
crypto/algif_hash.c
crypto/algif_rng.c

index 25cf2fa3dde75fea2927aa17cd9ed1678a9ab9d0..3d622904f4c3d530af647f806bcfbce502a3b939 100644 (file)
@@ -1127,14 +1127,13 @@ struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
        if (unlikely(!areq))
                return ERR_PTR(-ENOMEM);
 
+       memset(areq, 0, areqlen);
+
        ctx->inflight = true;
 
        areq->areqlen = areqlen;
        areq->sk = sk;
-       areq->last_rsgl = NULL;
        INIT_LIST_HEAD(&areq->rsgl_list);
-       areq->tsgl = NULL;
-       areq->tsgl_entries = 0;
 
        return areq;
 }
index be21cfdc6dbcd1fd75290e9d6466da9bc78ad1c3..a48fc7c24341c031f3ab0d087a3c18ec7b62d227 100644 (file)
@@ -423,9 +423,8 @@ static int hash_accept_parent_nokey(void *private, struct sock *sk)
        if (!ctx)
                return -ENOMEM;
 
-       ctx->result = NULL;
+       memset(ctx, 0, len);
        ctx->len = len;
-       ctx->more = false;
        crypto_init_wait(&ctx->wait);
 
        ask->private = ctx;
index 407408c437308f9d27eb0031da0fb16a4c8bf2a6..38a8f20a02e27d0d56c8a99faa4604853ddd700d 100644 (file)
@@ -250,9 +250,8 @@ static int rng_accept_parent(void *private, struct sock *sk)
        if (!ctx)
                return -ENOMEM;
 
+       memset(ctx, 0, len);
        ctx->len = len;
-       ctx->addtl = NULL;
-       ctx->addtl_len = 0;
 
        /*
         * No seeding done at that point -- if multiple accepts are