[PATCH] i.MX: hab: write srk lock with hab command

Fabian Pflug f.pflug at pengutronix.de
Fri Mar 6 02:36:21 PST 2026


Hello Marco,

the C APi already does it, if you give it this flag.

It is device dependen on which fuse to burn, so have a look at:


static int imx6_hab_write_srk_hash_ocotp(const u8 *newsrk, unsigned flags)
{
	int ret;

	ret = imx_hab_write_srk_hash_ocotp(newsrk);
	if (ret)
		return ret;

	if (flags & IMX_SRK_HASH_WRITE_LOCK) {
		ret = imx_ocotp_write_field(OCOTP_SRK_LOCK, 1);
		if (ret < 0)
			return ret;
	}

	return 0;
}

static int imx8m_hab_write_srk_hash_ocotp(const u8 *newsrk, unsigned flags)
{
	int ret;

	ret = imx_hab_write_srk_hash_ocotp(newsrk);
	if (ret)
		return ret;

	if (flags & IMX_SRK_HASH_WRITE_LOCK) {
		ret = imx_ocotp_write_field(MX8M_OCOTP_SRK_LOCK, 1);
		if (ret < 0)
			return ret;
	}

	return 0;
}

which get called by 
int imx_hab_write_srk_hash(const void *buf, unsigned flags)
Which is the C API.

I don't believe it is good to always write the lock bit in the C API, as this could be used to write partial hashes.

Kind regards
Fabian

On Fri, 2026-03-06 at 11:26 +0100, Marco Felsch wrote:
> Hi Fabian,
> 
> On 26-03-06, Fabian Pflug wrote:
> > The write_srk_hash functions already support the flag to write the SRK
> > lock, but it is never used in barebox. To prevent an attacker from
> > calculating an SRK hash that has the same bits set as the current SRK
> > hash, but with maybe more, we lock the SRK hash to prevent turning bits.
> > 
> > Writing the lock twice will probably result in unusable garbage and the
> > hab command itself already is written in a way to write the complete
> > hash and not parts of it.
> > 
> > Signed-off-by: Fabian Pflug <f.pflug at pengutronix.de>
> > ---
> >  commands/hab.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/commands/hab.c b/commands/hab.c
> > index 8ae943a4c8..b8ef770066 100644
> > --- a/commands/hab.c
> > +++ b/commands/hab.c
> > @@ -14,7 +14,7 @@ static int do_hab(int argc, char *argv[])
> >  {
> >  	int opt, ret, i;
> >  	char *srkhashfile = NULL, *srkhash = NULL;
> > -	unsigned flags = 0;
> > +	unsigned flags = IMX_SRK_HASH_WRITE_LOCK;
> 
> This would fix only the hab cmd, not the C-API. Instead we should fix
> the C-API to write the LOCK after the SRK was burned/fused.
> 
> Regards,
>   Marco
> 
> >  	u8 srk[SRK_HASH_SIZE];
> >  	int lockdown = 0, info = 0;
> >  
> > -- 
> > 2.47.3
> > 
> > 
> > 



More information about the barebox mailing list