Files
u-boot-krane/lib
Hem ParekhandHeinrich Schuchardt 3d47f55832 efi_loader: check efi_deserialize_load_option() in get_dp_device()
get_dp_device() reads a Boot#### variable and passes its contents to
efi_deserialize_load_option() but ignores the return value. On failure
efi_deserialize_load_option() may return without having initialised the
caller's struct efi_load_option, and even on a malformed device path it
sets lo.file_path before validating it with efi_dp_check_length().

As a result get_dp_device() can proceed to walk lo.file_path with
efi_dp_split_file_path() (via efi_dp_dup()/efi_dp_size()) on a device
path that was never validated, or on an uninitialised pointer when the
variable is too short to be parsed. A device-path node with a length of
zero makes the walk loop forever, and a length below the 4-byte node
header leads to an out-of-bounds read. The Boot#### variable is
attacker-controlled in threat models where writing EFI variables does
not imply the ability to execute firmware code, so this is reachable
during capsule-on-disk processing at boot.

Check the return value and bail out, as every other caller of
efi_deserialize_load_option() already does.

Suggested-by: Hem Parekh <hemparekh1596@gmail.com>
Cc: Hem Parekh <hemparekh1596@gmail.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
2026-07-27 18:50:28 +02:00
..
2026-05-11 12:04:43 -06:00
2025-04-11 12:16:44 -06:00
2025-04-11 12:16:44 -06:00
2025-07-26 07:34:31 +02:00
2026-06-25 14:13:44 -06:00
2025-02-03 16:01:36 -06:00
2026-06-24 18:13:24 -06:00
2025-02-03 16:01:36 -06:00
2024-12-06 17:47:23 -06:00
2025-04-03 16:54:49 -06:00
2024-12-06 17:47:23 -06:00
2025-01-18 17:12:47 -06:00
2024-12-06 17:47:23 -06:00
2026-02-11 11:13:47 +02:00
2026-07-21 13:51:07 -06:00
2024-11-13 08:14:23 -06:00
2025-01-28 08:58:41 +02:00
2025-12-04 09:38:58 -06:00
2024-10-14 17:58:30 -06:00
2025-12-04 09:38:58 -06:00
2025-04-23 13:19:44 -06:00
2026-04-21 11:19:49 -06:00