From: sashiko-bot@kernel.org
To: "Saravanakrishnan Krishnamoorthy" <skrishnamoorthy@rambus.com>
Cc: robh@kernel.org, devicetree@vger.kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH v3 15/19] crypto: cmh - add ML-KEM/ML-DSA (QSE)
Date: Thu, 06 Aug 2026 20:24:31 +0000 [thread overview]
Message-ID: <20260806202431.781AE1F00A3E@smtp.kernel.org> (raw)
In-Reply-To: <20260806195519.2703224-16-skrishnamoorthy@rambus.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] The driver unconditionally unmaps and frees DMA bounce buffers when hardware transactions time out, risking severe memory corruption if the hardware is wedged.
- [High] The ML-DSA sign and verify operations explicitly reject zero-length messages, violating FIPS 204 and breaking software fallback compatibility.
--
--- Patch [15]: [PATCH v3 15/19] crypto: cmh - add ML-KEM/ML-DSA (QSE) ---
commit 7381e2595560d52e928536b3ed32c1907a27b36c
Author: Alex Ousherovitch <aousherovitch@rambus.com>
crypto: cmh - add ML-KEM/ML-DSA (QSE)
Register ML-KEM (Kyber) and ML-DSA (Dilithium) algorithms using
the CMH QSE core (core ID 0x09). ML-KEM is ioctl-only (keygen,
encaps, decaps). ML-DSA is registered as a sig algorithm with
priority 5001 to override the kernel's verify-only mldsa
implementation at priority 5000.
> diff --git a/drivers/crypto/cmh/cmh_pqc_mldsa.c b/drivers/crypto/cmh/cmh_pqc_mldsa.c
> new file mode 100644
> index 0000000000000..8f9bdf67aea24
> --- /dev/null
> +++ b/drivers/crypto/cmh/cmh_pqc_mldsa.c
[ ... ]
> +static int cmh_mldsa_sign(struct crypto_sig *tfm,
> + const void *src, unsigned int slen,
> + void *dst, unsigned int dlen)
> +{
[ ... ]
> + if (dlen < sig_size)
> + return -EINVAL;
> + if (!slen || slen > ML_DSA_MAX_MLEN)
> + return -EINVAL;
[Severity: High]
Does this break compatibility by rejecting zero-length messages? FIPS 204
allows for empty messages, and rejecting them here could prevent the signing of
valid empty messages. Since the hardware driver overrides the software
fallback, this would break the capability kernel-wide.
[ ... ]
> + ret = cmh_tm_submit_sync_mbx(vcq, QSE_VCQ_CMDS_MIN, 1,
> + dd.mbx_idx);
> + if (!ret) {
> + /* Sync bounce buffer so CPU sees the DMA-written signature */
> + cmh_dma_sync_for_cpu(sig_dma, sig_size, DMA_FROM_DEVICE);
> + memcpy(dst, sig_buf, sig_size);
> + ret = sig_size;
> + }
> +
> +out_unmap:
> + if (!cmh_dma_map_error(sig_dma))
> + cmh_dma_unmap_single(sig_dma, sig_size, DMA_FROM_DEVICE);
> + if (!cmh_dma_map_error(m_dma))
> + cmh_dma_unmap_single(m_dma, slen, DMA_TO_DEVICE);
> +
> +out_free:
> + kfree(sig_buf);
> + kfree(m_buf);
> + return ret;
> +}
[Severity: Critical]
If cmh_tm_submit_sync_mbx() times out and returns an error, does this code
unconditionally unmap and free the DMA bounce buffers?
If the hardware is wedged and a timeout occurs, freeing the memory here could
leave the hardware DMA engine with a dangling physical address that it might
still write to later, leading to memory corruption.
[ ... ]
> +static int cmh_mldsa_verify(struct crypto_sig *tfm,
> + const void *src, unsigned int slen,
> + const void *digest, unsigned int dlen)
> +{
[ ... ]
> + if (slen != sig_size)
> + return -EINVAL;
> + if (!dlen || dlen > ML_DSA_MAX_MLEN)
> + return -EINVAL;
[Severity: High]
Similar to cmh_mldsa_sign(), does this incorrectly reject valid zero-length
verification requests?
[ ... ]
> + ret = cmh_tm_submit_sync_mbx(vcq, QSE_VCQ_CMDS_MIN, 1, d.mbx_idx);
> +
> +out_unmap:
> + if (!cmh_dma_map_error(pk_dma))
> + cmh_dma_unmap_single(pk_dma, pk_size, DMA_TO_DEVICE);
> + if (!cmh_dma_map_error(m_dma))
> + cmh_dma_unmap_single(m_dma, dlen, DMA_TO_DEVICE);
> + if (!cmh_dma_map_error(sig_dma))
> + cmh_dma_unmap_single(sig_dma, sig_size, DMA_TO_DEVICE);
> +
> +out_free:
> + kfree(pk_buf);
> + kfree(m_buf);
> + kfree(sig_buf);
> + return ret;
> +}
[Severity: Critical]
Could a timeout from cmh_tm_submit_sync_mbx() cause these buffers to be freed
while the hardware might still perform a DMA read from them later?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260806195519.2703224-1-skrishnamoorthy@rambus.com?part=15
next prev parent reply other threads:[~2026-08-06 20:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 19:54 [PATCH v3 00/19] crypto: cmh - add Rambus CryptoManager Hub driver Saravanakrishnan Krishnamoorthy
2026-08-06 19:55 ` [PATCH v3 01/19] dt-bindings: crypto: add Rambus CryptoManager Hub Saravanakrishnan Krishnamoorthy
2026-08-06 20:01 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 02/19] crypto: cmh - add core platform driver Saravanakrishnan Krishnamoorthy
2026-08-06 20:11 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 03/19] crypto: cmh - add key provisioning and management Saravanakrishnan Krishnamoorthy
2026-08-06 20:17 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 04/19] crypto: cmh - add SHA-2/SHA-3/SHAKE ahash Saravanakrishnan Krishnamoorthy
2026-08-06 20:12 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 05/19] crypto: cmh - add HMAC ahash Saravanakrishnan Krishnamoorthy
2026-08-06 20:09 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 06/19] crypto: cmh - add CSHAKE/KMAC ahash Saravanakrishnan Krishnamoorthy
2026-08-06 20:10 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 07/19] crypto: cmh - add SM3 ahash Saravanakrishnan Krishnamoorthy
2026-08-06 20:07 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 08/19] crypto: cmh - add AES skcipher/aead/cmac Saravanakrishnan Krishnamoorthy
2026-08-06 20:10 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 09/19] crypto: cmh - add SM4 skcipher/aead/cmac/xcbc Saravanakrishnan Krishnamoorthy
2026-08-06 20:09 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 10/19] crypto: cmh - add ChaCha20-Poly1305 Saravanakrishnan Krishnamoorthy
2026-08-06 20:12 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 11/19] crypto: cmh - add DRBG hwrng Saravanakrishnan Krishnamoorthy
2026-08-06 20:17 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 12/19] crypto: cmh - add RSA akcipher Saravanakrishnan Krishnamoorthy
2026-08-06 20:18 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 13/19] crypto: cmh - add ECDSA/SM2 sig Saravanakrishnan Krishnamoorthy
2026-08-06 20:24 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 14/19] crypto: cmh - add ECDH/X25519 kpp Saravanakrishnan Krishnamoorthy
2026-08-06 20:34 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 15/19] crypto: cmh - add ML-KEM/ML-DSA (QSE) Saravanakrishnan Krishnamoorthy
2026-08-06 20:24 ` sashiko-bot [this message]
2026-08-06 19:55 ` [PATCH v3 16/19] crypto: cmh - add SLH-DSA/LMS/XMSS (HCQ) Saravanakrishnan Krishnamoorthy
2026-08-06 20:43 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 17/19] Documentation: ioctl: add CMH ioctl documentation and register 'J' Saravanakrishnan Krishnamoorthy
2026-08-06 20:25 ` sashiko-bot
2026-08-06 19:55 ` [PATCH v3 18/19] selftests: crypto: cmh - add kselftest for management ioctl Saravanakrishnan Krishnamoorthy
2026-08-06 19:55 ` [PATCH v3 19/19] MAINTAINERS: add Rambus CryptoManager Hub (CMH) Saravanakrishnan Krishnamoorthy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260806202431.781AE1F00A3E@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=skrishnamoorthy@rambus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox