All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.ibm.com>
To: Mian Yousaf Kaukab <ykaukab@suse.de>,
	linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: davem@davemloft.net, herbert@gondor.apana.org.au, tiwai@suse.de,
	guillaume.gardet@arm.com
Subject: Re: [PATCH] crypto: ecc: handle unaligned input buffer in ecc_swap_digits
Date: Wed, 21 Jul 2021 08:10:20 -0400	[thread overview]
Message-ID: <1662e2df-34e9-d8fa-4a24-e579618f635e@linux.ibm.com> (raw)
In-Reply-To: <20210721083905.15144-1-ykaukab@suse.de>


On 7/21/21 4:39 AM, Mian Yousaf Kaukab wrote:
> ecdsa_set_pub_key() makes an u64 pointer at 1 byte offset of the key.
> This results in an unaligned u64 pointer. This pointer is passed to
> ecc_swap_digits() which assumes natural alignment.
>
> This causes a kernel crash on an armv7 platform:
> [    0.409022] Unhandled fault: alignment exception (0x001) at 0xc2a0a6a9
> ...
> [    0.416982] PC is at ecdsa_set_pub_key+0xdc/0x120
> ...
> [    0.491492] Backtrace:
> [    0.492059] [<c07c266c>] (ecdsa_set_pub_key) from [<c07c75d4>] (test_akcipher_one+0xf4/0x6c0)
>
> Handle unaligned input buffer in ecc_swap_digits() by replacing
> be64_to_cpu() to get_unaligned_be64(). Change type of in pointer to
> void to reflect it doesn’t necessarily need to be aligned.
>
> Fixes: 4e6602916bc6 ("crypto: ecdsa - Add support for ECDSA signature verification")
> Reported-by: Guillaume Gardet <guillaume.gardet@arm.com>
> Suggested-by: Takashi Iwai <tiwai@suse.de>
> Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de>


Tested-by: Stefan Berger <stefanb@linux.ibm.com>


> ---
>   crypto/ecc.h | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/crypto/ecc.h b/crypto/ecc.h
> index a006132646a4..1350e8eb6ac2 100644
> --- a/crypto/ecc.h
> +++ b/crypto/ecc.h
> @@ -27,6 +27,7 @@
>   #define _CRYPTO_ECC_H
>   
>   #include <crypto/ecc_curve.h>
> +#include <asm/unaligned.h>
>   
>   /* One digit is u64 qword. */
>   #define ECC_CURVE_NIST_P192_DIGITS  3
> @@ -46,13 +47,13 @@
>    * @out:      Output array
>    * @ndigits:  Number of digits to copy
>    */
> -static inline void ecc_swap_digits(const u64 *in, u64 *out, unsigned int ndigits)
> +static inline void ecc_swap_digits(const void *in, u64 *out, unsigned int ndigits)
>   {
>   	const __be64 *src = (__force __be64 *)in;
>   	int i;
>   
>   	for (i = 0; i < ndigits; i++)
> -		out[i] = be64_to_cpu(src[ndigits - 1 - i]);
> +		out[i] = get_unaligned_be64(&src[ndigits - 1 - i]);
>   }
>   
>   /**

  reply	other threads:[~2021-07-21 12:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-21  8:39 [PATCH] crypto: ecc: handle unaligned input buffer in ecc_swap_digits Mian Yousaf Kaukab
2021-07-21 12:10 ` Stefan Berger [this message]
2021-07-30  3:11 ` Herbert Xu

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=1662e2df-34e9-d8fa-4a24-e579618f635e@linux.ibm.com \
    --to=stefanb@linux.ibm.com \
    --cc=davem@davemloft.net \
    --cc=guillaume.gardet@arm.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tiwai@suse.de \
    --cc=ykaukab@suse.de \
    /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.