[PATCH] rsa: fix alignment issue when getting public exponent
Jan Kiszka
jan.kiszka at siemens.com
Thu May 7 09:10:17 CEST 2020
On 03.05.20 13:26, Heiko Stuebner wrote:
> From: Heiko Stuebner <heiko.stuebner at theobroma-systems.com>
>
> To fill the exponent field of the rsa_public_key struct, rsa_mod_exp_sw
> did a cast to uint64_t of the key_prop->public_exponent field.
> But that alignment is not guaranteed in all cases.
>
> This came to light when in my spl-fit-signature the key-name exceeded
> a certain length and with it the verification then started failing.
> (naming it "integrity" worked fine, "integrity-uboot" failed)
>
> key_prop.public_exponent itself is actually a void-pointer, fdt_getprop()
> also just returns such a void-pointer and inside the devicetree the 64bit
> exponent is represented as 2 32bit numbers, so assuming a 64bit alignment
> can lead to false reads.
>
> So just use the already existing rsa_convert_big_endian() to do the actual
> conversion from the dt's big-endian to the needed uint64 value.
>
> Fixes: fc2f4246b4b3 ("rsa: Split the rsa-verify to separate the modular exponentiation")
> Signed-off-by: Heiko Stuebner <heiko.stuebner at theobroma-systems.com>
> Reviewed-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> ---
> lib/rsa/rsa-mod-exp.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/rsa/rsa-mod-exp.c b/lib/rsa/rsa-mod-exp.c
> index 420ab2eba0..62b2557cc2 100644
> --- a/lib/rsa/rsa-mod-exp.c
> +++ b/lib/rsa/rsa-mod-exp.c
> @@ -262,8 +262,8 @@ int rsa_mod_exp_sw(const uint8_t *sig, uint32_t sig_len,
> if (!prop->public_exponent)
> key.exponent = RSA_DEFAULT_PUBEXP;
> else
> - key.exponent =
> - fdt64_to_cpu(*((uint64_t *)(prop->public_exponent)));
> + rsa_convert_big_endian((uint32_t *)&key.exponent,
> + prop->public_exponent, 2);
>
> if (!key.len || !prop->modulus || !prop->rr) {
> debug("%s: Missing RSA key info", __func__);
>
Tested-by: Jan Kiszka <jan.kiszka at siemens.com>
I debugged the same issue on our AM654x-based board where we do fit
image verification in SPL. As there is apparently no unaligned access
possible, this bit us as well. Obsoletes my own patch attempt.
Jan
--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux
More information about the U-Boot
mailing list