[PATCH v2 1/4] ARM: stm32: Fix ECDSA authentication with Dcache enabled
Patrick DELAUNAY
patrick.delaunay at foss.st.com
Mon Dec 12 10:40:48 CET 2022
Hi,
On 12/7/22 20:32, Marek Vasut wrote:
> On 12/7/22 11:08, Patrick DELAUNAY wrote:
>> Hi Marek,
>
> Hello Patrick,
>
>> Sorry for the delay.
>
> No worries.
>
>> I cross-check with ROM code team to understood this API limitation.
>
> Thank you!
>
>> On 12/6/22 23:49, Marek Vasut wrote:
>>> In case Dcache is enabled while the ECDSA authentication function is
>>> called via BootROM ROM API, the CRYP DMA might pick stale version of
>>> data from DRAM. Disable Dcache around the BootROM call to avoid this
>>> issue.
>>>
>>> Signed-off-by: Marek Vasut <marex at denx.de>
>>> ---
>>> Cc: Alexandru Gagniuc <mr.nuke.me at gmail.com>
>>> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
>>> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
>>> ---
>>> V2: - Initialize reenable_dcache variable
>>> ---
>>> arch/arm/mach-stm32mp/ecdsa_romapi.c | 14 ++++++++++++++
>>> 1 file changed, 14 insertions(+)
>>>
>>> diff --git a/arch/arm/mach-stm32mp/ecdsa_romapi.c
>>> b/arch/arm/mach-stm32mp/ecdsa_romapi.c
>>> index a2f63ff879f..082178ce83f 100644
>>> --- a/arch/arm/mach-stm32mp/ecdsa_romapi.c
>>> +++ b/arch/arm/mach-stm32mp/ecdsa_romapi.c
>>> @@ -63,6 +63,7 @@ static int romapi_ecdsa_verify(struct udevice *dev,
>>> const void *hash, size_t hash_len,
>>> const void *signature, size_t sig_len)
>>> {
>>> + bool reenable_dcache = false;
>>> struct ecdsa_rom_api rom;
>>> uint8_t raw_key[64];
>>> uint32_t rom_ret;
>>> @@ -81,8 +82,21 @@ static int romapi_ecdsa_verify(struct udevice *dev,
>>> memcpy(raw_key + 32, pubkey->y, 32);
>>> stm32mp_rom_get_ecdsa_functions(&rom);
>>> +
>>> + /*
>>> + * Disable D-cache before calling into BootROM, else CRYP DMA
>>> + * may fail to pick up the correct data.
>>> + */
>>> + if (dcache_status()) {
>>> + dcache_disable();
>>> + reenable_dcache = true;
>>> + }
>>> +
>>> rom_ret = rom.ecdsa_verify_signature(hash, raw_key, signature,
>>> algo);
>>> + if (reenable_dcache)
>>> + dcache_enable();
>>> +
>>> return rom_ret == ROM_API_SUCCESS ? 0 : -EPERM;
>>> }
>>
>>
>> In fact, the ecdsa_verify_signature() don't use the HW (no DMA and no
>> use of CRYP IP )
>
> Hmmm, what does the BootROM use CRYP for then ?
used for SSP = Secure Secret Provisioning
https://wiki.st.com/stm32mpu/wiki/Secure_Secret_Provisioning_(SSP)
> It is necessary to have MP15xC/F for the authenticated boot to work,
> but it seems the only difference there is the presence of CRYP. Or is
> there some BootROM fuse too ?
Yes, the secure boot feature availability is indicated in the security
field of the chip part number, for STM32MP13 and STM32MP15.
- SSP is not supported
- the associated authentication feature for secure boot is deactivated
in ROM code
=> the key is burned/locked in OTP on these chips
and checked by ROM code before to authenticate the FSBL
...
> This indeed works, tested and sent V3.
>
>> Sorry again for the first review, not complete...
>
> Thank you for checking !
Regards
Patrick
More information about the U-Boot
mailing list