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

James Hilliard <[email protected]>
Newsgroups org.u-boot-project.lists.u-boot
Message-ID <CADvTj4rTCJN=azo4YAt=smZum=HRw9gNF0MJ3eXfkzpNuhEEsw@mail.gmail.com>
On Fri, Aug 14, 2026 at 4:31 PM Simon Glass <[email protected]> wrote:
>
> 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.

Missing tests added in v8:
https://lore.kernel.org/u-boot/[email protected]/

> >
> > 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?

Yes. In v8 I added an explicit hash_abort() provider operation. After a
successful hash_init(), the context must be consumed by exactly one
hash_finish() or hash_abort() call.

hash_calculate() now calls hash_abort() after any hash_update() failure
and returns the original update error. The existing progressive providers
were updated with matching abort cleanup.

The new failure-path test verifies that an update error calls
hash_abort() exactly once and does not call hash_finish().

See v8:
https://lore.kernel.org/u-boot/[email protected]/

>
> 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.