]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: mxs-dcp - Only set OTP_KEY bit for OTP key
authorSven Schwermer <sven@svenschwermer.de>
Mon, 24 Feb 2025 07:42:25 +0000 (08:42 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:12:52 +0000 (11:12 +0200)
[ Upstream commit caa9dbb76ff52ec848a57245062aaeaa07740adc ]

While MXS_DCP_CONTROL0_OTP_KEY is set, the CRYPTO_KEY (DCP_PAES_KEY_OTP)
is used even if the UNIQUE_KEY (DCP_PAES_KEY_UNIQUE) is selected. This
is not clearly documented, but this implementation is consistent with
NXP's downstream kernel fork and optee_os.

Signed-off-by: Sven Schwermer <sven@svenschwermer.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/crypto/mxs-dcp.c

index d94a26c3541a08bda9f82b873c17e4987c751f55..133ebc998236262eade9b84711dd3f34747612b3 100644 (file)
@@ -265,12 +265,12 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx,
                    MXS_DCP_CONTROL0_INTERRUPT |
                    MXS_DCP_CONTROL0_ENABLE_CIPHER;
 
-       if (key_referenced)
-               /* Set OTP key bit to select the key via KEY_SELECT. */
-               desc->control0 |= MXS_DCP_CONTROL0_OTP_KEY;
-       else
+       if (!key_referenced)
                /* Payload contains the key. */
                desc->control0 |= MXS_DCP_CONTROL0_PAYLOAD_KEY;
+       else if (actx->key[0] == DCP_PAES_KEY_OTP)
+               /* Set OTP key bit to select the key via KEY_SELECT. */
+               desc->control0 |= MXS_DCP_CONTROL0_OTP_KEY;
 
        if (rctx->enc)
                desc->control0 |= MXS_DCP_CONTROL0_CIPHER_ENCRYPT;