[Skiboot] [PATCH] core/flash: Validate secure boot content size
Jordan Niethe
jniethe5 at gmail.com
Fri Aug 16 16:53:05 AEST 2019
On Fri, 2019-08-16 at 15:40 +1000, Oliver O'Halloran wrote:
> Currently we don't check if the secure boot payload size fits within
> the partition that we are reading it from. This results in strange
> failures later on in boot if we cross the boundary between an ECCed
> and a non-ECCed partition since libflash does not support reading
> from regions with mixed ECC status.
>
> Without this patch:
>
> blocklevel_read: Can't cope with partial ecc
> FLASH: failed to read content size 15728640 BOOTKERNEL partition, rc
> 3
>
> With:
>
> FLASH: Cannot load BOOTKERNEL. Content is larger than the partition
>
> Cc: Nayna Jain <nayna at linux.ibm.com>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
> feel free to bikeshed the log message.
> ---
> core/flash.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/core/flash.c b/core/flash.c
> index bfa4a7207a79..67c39c264f7b 100644
> --- a/core/flash.c
> +++ b/core/flash.c
> @@ -631,6 +631,10 @@ static int flash_load_resource(enum resource_id
> id, uint32_t subid,
> prlog(PR_DEBUG,"FLASH: %s partition %s ECC\n",
> name, ecc ? "has" : "doesn't have");
>
> + /*
> + * FIXME: Make the fact we don't support partitions smaller
> than 4K
> + * more explicit.
> + */
> if (ffs_part_size < SECURE_BOOT_HEADERS_SIZE) {
> prerror("FLASH: secboot headers bigger than "
> "partition size 0x%x\n", ffs_part_size);
> @@ -668,6 +672,13 @@ static int flash_load_resource(enum resource_id
> id, uint32_t subid,
> goto out_free_ffs;
> }
>
> + if (*len > ffs_part_size) {
> + prerror("FLASH: Cannot load %s. Content is
> larger than the partition\n",
> + name);
Bikeshedding: Would it be nice to include the sizes in the message?
> + rc = OPAL_PARAMETER;
> + goto out_free_ffs;
> + }
> +
> ffs_part_start += SECURE_BOOT_HEADERS_SIZE;
>
> rc = blocklevel_read(flash->bl, ffs_part_start, bufp,
More information about the Skiboot
mailing list