Re: [PATCH v7 06/15] crypto: hash: support hardware-only progressive hashing

Simon Glass <[email protected]>
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <CAFLszTig3sOjU-bDZ5mrkmXvRabLA4Rsg4oC_n6+4Y=ghhXpeA__12044.7992043168$1786755172$gmane$org@mail.gmail.com>
Hi James,

On 2026-08-13T19:58:53, James Hilliard <[email protected]> wrote:
> crypto: hash: support hardware-only progressive hashing
>
> FIT configuration signatures hash multiple discontiguous regions through
> the legacy progressive hash interface. This still requires a software
> implementation even when image hashes use a driver-model hardware
> provider.
>
> Add provider selection for progressive driver-model hashing and use it
> from hash_calculate(). Allow SPL_SHA256_LEGACY to be disabled explicitly,
> link the SHA-256 software support only for a selected software backend,
> and make legacy fallback paths reject an algorithm whose software
> callbacks are absent.
>
> Extend the hash provider-selection test to cover progressive
> initialization.

That seems like a stale comment, at least for this commit.

>
> This permits SPL to retain SHA-256 FIT support while relying exclusively
> on a hardware hash provider.
>
> Signed-off-by: James Hilliard <[email protected]>
>
> boot/image-fit.c                  |  2 +-
>  common/hash.c                     | 21 +++++++++++++++++++--
>  drivers/crypto/hash/hash-uclass.c | 31 +++++++++++++++++++++++++++++++
>  include/u-boot/hash.h             | 14 ++++++++++++++
>  lib/Makefile                      |  4 ++--
>  lib/hash-checksum.c               | 28 +++++++++++++++++++++++++++-
>  lib/mbedtls/Kconfig               |  2 +-
>  7 files changed, 95 insertions(+), 7 deletions(-)

> diff --git a/lib/hash-checksum.c b/lib/hash-checksum.c
> @@ -20,13 +22,37 @@ int hash_calculate(const char *name,
> +             if (!ret) {
> +                     for (i = 0; i < region_count; i++) {
> +                             ret = hash_update(dev, ctx, region[i].data,
> +                                               region[i].size);
> +                             if (ret)
> +                                     return ret;
> +                     }
> +
> +                     return hash_finish(dev, ctx, checksum);
> +             }

If hash_update() fails partway through, the provider's ctx is leaked -
nothing calls hash_finish() or an equivalent free path. Do you need an
explicit teardown on the error exit?

Reviewed-by: Simon Glass <[email protected]>

Regards,
Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.