summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-08-23 10:59:17 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-08-24 16:37:53 +0200
commit15d8f008dc577bbef6ad98494c28553558941420 (patch)
treeac0e32cc27ea556382bd1b5f90bc611ead1d808c
parent5bba77e48be801176a55223b1f76bc44e8e1b3cb (diff)
downloadu-boot-socfpga-15d8f008dc577bbef6ad98494c28553558941420.tar.gz
efi_loader: validate device path length in boot manager
Bootxxxx variables are provided by the user and therefore cannot be trusted. We have to validate them before usage. A device path provided by a Bootxxxx variable must have an end node within the indicated device path length. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-rw-r--r--lib/efi_loader/efi_bootmgr.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
index 1e06e60963..61dc72a23d 100644
--- a/lib/efi_loader/efi_bootmgr.c
+++ b/lib/efi_loader/efi_bootmgr.c
@@ -105,10 +105,8 @@ efi_status_t efi_deserialize_load_option(struct efi_load_option *lo, u8 *data,
if (*size < len)
return EFI_INVALID_PARAMETER;
lo->file_path = (struct efi_device_path *)data;
- /*
- * TODO: validate device path. There should be an end node within
- * the indicated file_path_length.
- */
+ if (efi_dp_check_length(lo->file_path, len) < 0)
+ return EFI_INVALID_PARAMETER;
data += len;
*size -= len;