On Wed, Oct 07, 2020 at 12:17:56AM +0200, Rasmus Villemoes wrote: > On 07/10/2020 00.02, Simon Glass wrote: > > Hi Rasmus, > > > > On Tue, 6 Oct 2020 at 04:10, Rasmus Villemoes > > <rasmus.villem...@prevas.dk> wrote: > >> > >> Commit fdf0819afb (rsa: fix alignment issue when getting public > >> exponent) changed the logic to avoid doing an 8-byte access to a > >> possibly-not-8-byte-aligned address. > >> > >> However, using rsa_convert_big_endian is wrong: That function converts > >> an array of big-endian (32-bit) words with the most significant word > >> first (aka a BE byte array) to an array of cpu-endian words with the > >> least significant word first. While the exponent is indeed _stored_ as > >> a big-endian 64-bit word (two BE words with MSW first), we want to > >> extract it as a cpu-endian 64 bit word. On a little-endian host, > >> swapping the words and byte-swapping each 32-bit word works, because > >> that's the same as byte-swapping the whole 64 bit word. But on a > >> big-endian host, the fdt32_to_cpu are no-ops, but > >> rsa_convert_big_endian() still does the word-swapping, breaking > >> verified boot. > >> > >> To fix that, while still ensuring we don't do unaligned accesses, add > >> a little helper that first memcpy's the bytes to a local fdt64_t, then > >> applies fdt64_to_cpu(). [The name is chosen based on the > >> [bl]eXX_to_cpup in linux/byteorder/generic.h]. > >> > >> Fixes: fdf0819afb ("rsa: fix alignment issue when getting public exponent") > >> Signed-off-by: Rasmus Villemoes <rasmus.villem...@prevas.dk> > >> --- > >> lib/rsa/rsa-mod-exp.c | 11 +++++++++-- > >> 1 file changed, 9 insertions(+), 2 deletions(-) > >> > > > > Reviewed-by: Simon Glass <s...@chromium.org> > > > > Is there a way to add a test for this? > > Not that I can think of, other than finding some BE board and hooking it > up in some CI. Apparently not very many people use verified boot on BE > platforms :( or at least they don't follow upstream U-Boot closely.
We have tests for verified boot for sandbox. Can we not expand them to run on qemu* including ppce500? -- Tom
signature.asc
Description: PGP signature