From: Eric Biggers <ebiggers@kernel.org>
To: Ard Biesheuvel <ardb@kernel.org>
Cc: linux-crypto@vger.kernel.org, herbert@gondor.apana.org.au,
linux-arm-kernel@lists.infradead.org, james.morse@arm.com
Subject: Re: [PATCH] crypto: arm/aes-ce - work around Cortex-A72 erratum #1655431
Date: Wed, 25 Nov 2020 08:56:24 -0800 [thread overview]
Message-ID: <X76MuJmPvy6CeoBd@sol.localdomain> (raw)
In-Reply-To: <20201125072216.892-1-ardb@kernel.org>
On Wed, Nov 25, 2020 at 08:22:16AM +0100, Ard Biesheuvel wrote:
> ARM Cortex-A72 cores running in 32-bit mode are affected by a silicon
> erratum (1655431: ELR recorded incorrectly on interrupt taken between
> cryptographic instructions in a sequence [0]) where the second instruction
> of a AES instruction pair may execute twice if an interrupt is taken right
> after the first instruction consumes an input register of which a single
> 32-bit lane has been updated the last time it was modified.
>
> This is not such a rare occurrence as it may seem: in counter mode, only
> the least significant 32-bit word is incremented in the absence of a
> carry, which makes our counter mode implementation susceptible to the
> erratum.
>
> So let's shuffle the counter assignments around a bit so that the most
> recent updates when the AES instruction pair executes are 128-bit wide.
>
> [0] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice
>
> Cc: <stable@vger.kernel.org> # v5.4+
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
> arch/arm/crypto/aes-ce-core.S | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/crypto/aes-ce-core.S b/arch/arm/crypto/aes-ce-core.S
> index 4d1707388d94..c0ef9680d90b 100644
> --- a/arch/arm/crypto/aes-ce-core.S
> +++ b/arch/arm/crypto/aes-ce-core.S
> @@ -386,20 +386,20 @@ ENTRY(ce_aes_ctr_encrypt)
> .Lctrloop4x:
> subs r4, r4, #4
> bmi .Lctr1x
> - add r6, r6, #1
> + add ip, r6, #1
> vmov q0, q7
> + rev ip, ip
> + add lr, r6, #2
> + vmov s31, ip
> + add ip, r6, #3
> + rev lr, lr
> vmov q1, q7
> - rev ip, r6
> - add r6, r6, #1
> + vmov s31, lr
> + rev ip, ip
> vmov q2, q7
> - vmov s7, ip
> - rev ip, r6
> - add r6, r6, #1
> + vmov s31, ip
> + add r6, r6, #4
> vmov q3, q7
> - vmov s11, ip
> - rev ip, r6
> - add r6, r6, #1
> - vmov s15, ip
> vld1.8 {q4-q5}, [r1]!
> vld1.8 {q6}, [r1]!
> vld1.8 {q15}, [r1]!
Seems like this could use a comment that explains that things need to be done in
a certain way to avoid an erratum.
- Eric
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org>
To: Ard Biesheuvel <ardb@kernel.org>
Cc: james.morse@arm.com, linux-crypto@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
herbert@gondor.apana.org.au
Subject: Re: [PATCH] crypto: arm/aes-ce - work around Cortex-A72 erratum #1655431
Date: Wed, 25 Nov 2020 08:56:24 -0800 [thread overview]
Message-ID: <X76MuJmPvy6CeoBd@sol.localdomain> (raw)
In-Reply-To: <20201125072216.892-1-ardb@kernel.org>
On Wed, Nov 25, 2020 at 08:22:16AM +0100, Ard Biesheuvel wrote:
> ARM Cortex-A72 cores running in 32-bit mode are affected by a silicon
> erratum (1655431: ELR recorded incorrectly on interrupt taken between
> cryptographic instructions in a sequence [0]) where the second instruction
> of a AES instruction pair may execute twice if an interrupt is taken right
> after the first instruction consumes an input register of which a single
> 32-bit lane has been updated the last time it was modified.
>
> This is not such a rare occurrence as it may seem: in counter mode, only
> the least significant 32-bit word is incremented in the absence of a
> carry, which makes our counter mode implementation susceptible to the
> erratum.
>
> So let's shuffle the counter assignments around a bit so that the most
> recent updates when the AES instruction pair executes are 128-bit wide.
>
> [0] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice
>
> Cc: <stable@vger.kernel.org> # v5.4+
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
> arch/arm/crypto/aes-ce-core.S | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/crypto/aes-ce-core.S b/arch/arm/crypto/aes-ce-core.S
> index 4d1707388d94..c0ef9680d90b 100644
> --- a/arch/arm/crypto/aes-ce-core.S
> +++ b/arch/arm/crypto/aes-ce-core.S
> @@ -386,20 +386,20 @@ ENTRY(ce_aes_ctr_encrypt)
> .Lctrloop4x:
> subs r4, r4, #4
> bmi .Lctr1x
> - add r6, r6, #1
> + add ip, r6, #1
> vmov q0, q7
> + rev ip, ip
> + add lr, r6, #2
> + vmov s31, ip
> + add ip, r6, #3
> + rev lr, lr
> vmov q1, q7
> - rev ip, r6
> - add r6, r6, #1
> + vmov s31, lr
> + rev ip, ip
> vmov q2, q7
> - vmov s7, ip
> - rev ip, r6
> - add r6, r6, #1
> + vmov s31, ip
> + add r6, r6, #4
> vmov q3, q7
> - vmov s11, ip
> - rev ip, r6
> - add r6, r6, #1
> - vmov s15, ip
> vld1.8 {q4-q5}, [r1]!
> vld1.8 {q6}, [r1]!
> vld1.8 {q15}, [r1]!
Seems like this could use a comment that explains that things need to be done in
a certain way to avoid an erratum.
- Eric
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-11-25 16:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-25 7:22 [PATCH] crypto: arm/aes-ce - work around Cortex-A72 erratum #1655431 Ard Biesheuvel
2020-11-25 7:22 ` Ard Biesheuvel
2020-11-25 16:56 ` Eric Biggers [this message]
2020-11-25 16:56 ` Eric Biggers
2020-11-25 17:03 ` Ard Biesheuvel
2020-11-25 17:03 ` Ard Biesheuvel
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=X76MuJmPvy6CeoBd@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=ardb@kernel.org \
--cc=herbert@gondor.apana.org.au \
--cc=james.morse@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.