]> git.ipfire.org Git - thirdparty/systemd.git/commit
pcrlock: reject device path node shorter than its header
authorSyed Mohammed Nayyar <jmestwa@gmail.com>
Thu, 25 Jun 2026 16:46:03 +0000 (22:16 +0530)
committerLennart Poettering <lennart@poettering.net>
Thu, 25 Jun 2026 20:11:12 +0000 (22:11 +0200)
commitd2a704388f846f2b3d3550c19ce7af0e9dc360b0
treeb4c802b6410bbb8c4cc0b5218582e46dde610451
parent2da8cd09c21d1b44f35754bd02d475d7fa9f4ed8
pcrlock: reject device path node shorter than its header

event_log_record_extract_firmware_description() walks the device path
of a UEFI_IMAGE_LOAD_EVENT taken from the firmware TPM2 measurement log.
The per-node loop checks the remaining bytes against the node and its
declared length, but never that dp->length covers the 4-byte node header
offsetof(packed_EFI_DEVICE_PATH, path).

For a Media/File-Path node with length 3, the file-name extraction
computes dp->length - offsetof(packed_EFI_DEVICE_PATH, path) == 3 - 4,
which wraps to SIZE_MAX. utf16_to_utf8() treats SIZE_MAX as unbounded
and runs char16_strlen() over dp->path, reading past the log buffer; a
length of 0 also leaves dp non-advancing.

efi_get_boot_option() in src/shared/efi-api.c already rejects such nodes
with "if (dpath->length < 4) break;"; do the same here.
src/pcrlock/pcrlock.c