[PATCH 0/4] fit: Harden handling of external-data properties
Anton Ivanov via U-Boot <[email protected]>
| Newsgroups | gmane.comp.boot-loaders.u-boot |
|---|---|
| Message-ID | <[email protected]> |
The data-offset, data-position and data-size FIT properties are 32-bit
unsigned values, but were read through signed int. Also, they are
excluded from the configuration signature, so they are attacker
controlled.
Patch 1 switches the accessors and their callers to u32, removing
the ad-hoc handling of "negative" values in U-Boot proper. This
transition was discussed and agreed on in [1].
The SPL loader has its own copy of this logic with the same problems
and fewer checks. Patch 2 factors out a test helper, patch 3 makes the
SPL offset/size arithmetic overflow-safe, and patch 4 adds the
addressable-range and FIT_SIGNATURE_MAX_SIZE bounds check that U-Boot
proper already performs in fit_image_get_data().
Patches 3 and 4 build on each other and on patch 1, so they are not
intended to be cherry-picked individually.
[1] https://lore.kernel.org/u-boot/CAPWaX55XWFLcMGRuaUuXXn__MX_UG4J8QTd6rvXZmJ4WSOCy9w@mail.gmail.com/
---
Anton Ivanov (4):
image-fit: Use unsigned types for external data properties
test: spl: Factor out external-data FIT property checks
spl: fit: Harden external-data offset and size arithmetic
spl: fit: Bound external data like U-Boot proper
boot/image-fit.c | 29 ++++------
common/spl/spl_fit.c | 122 +++++++++++++++++++++++++--------------
common/splash_source.c | 2 +-
drivers/fpga/socfpga_arria10.c | 3 +-
include/image.h | 6 +-
test/image/spl_load.c | 128 +++++++++++++++++++++++++++++++++++------
test/py/tests/test_vboot.py | 6 +-
7 files changed, 206 insertions(+), 90 deletions(-)
---
base-commit: 94b349bd902d9e38e1846c157fadd9054c34680a
change-id: 20260730-b4-fit-ext-data-hardening-1734a9203753
Best regards,
--
Anton Ivanov <[email protected]>