mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-18 00:17:58 +00:00

It seems some older versions of libefi var incorrectly build the 'length' value in the DP returned from efi_generate_file_device_path(). This means we copy past the end of the allocated buffer when parsing the efi_update_info_t structure. This bug seems fixed in efivar git master, and this fix is only going to help people with older efivar versions. It's probably a good thing to be a bit more paranoid about EFI variable data anyway. DEBUG: UpdateInfo: ? 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ???????????????????????????????????????????????????????????????????????????????????????????????????????? 0x0000 ? 07 00 00 00 20 d9 7b 69 cf 12 a9 4d 83 85 99 69 09 bc 65 59 00 00 05 00 00 00 00 00 00 00 00 00 0x0020 ? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 04 01 2a 00 01 00 00 00 00 08 00 00 0x0040 ? 00 00 00 00 00 40 06 00 00 00 00 00 5a aa 97 5a 10 d5 7e 49 99 0b ca 8d 35 4d c8 6d 02 02 04 04 0x0060 ? 86 00 5c 00 45 00 46 00 49 00 5c 00 66 00 65 00 64 00 6f 00 72 00 61 00 5c 00 66 00 77 00 5c 00 0x0080 ? 66 00 77 00 75 00 70 00 64 00 2d 00 36 00 39 00 37 00 62 00 64 00 39 00 32 00 30 00 2d 00 31 00 0x00a0 ? 32 00 63 00 66 00 2d 00 34 00 64 00 61 00 39 00 2d 00 38 00 33 00 38 00 35 00 2d 00 39 00 39 00 0x00c0 ? 36 00 39 00 30 00 39 00 62 00 63 00 36 00 35 00 35 00 39 00 2e 00 63 00 61 00 70 00 00 00 7f ff 0x00e0 ? 04 00 DEBUG: DP type:0x04 subtype:0x01 size:0x002a DEBUG: DP type:0x04 subtype:0x04 size:0x0086 DEBUG: found END_ENTIRE at 0x00aa DEBUG: DP length invalid! Truncating from 0x0086 to 0x0080 DEBUG: DP type:0x7f subtype:0xff size:0x0004
29 lines
594 B
C
29 lines
594 B
C
/*
|
|
* Copyright (C) 2018-2019 Richard Hughes <richard@hughsie.com>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1+
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <glib.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef enum {
|
|
FU_UEFI_DEVPATH_PARSE_FLAG_NONE = 0,
|
|
FU_UEFI_DEVPATH_PARSE_FLAG_REPAIR = 1 << 0,
|
|
FU_UEFI_DEVPATH_PARSE_FLAG_LAST
|
|
} FuUefiDevpathParseFlags;
|
|
|
|
GPtrArray *fu_uefi_devpath_parse (const guint8 *buf,
|
|
gsize sz,
|
|
FuUefiDevpathParseFlags flags,
|
|
GError **error);
|
|
GBytes *fu_uefi_devpath_find_data (GPtrArray *dps,
|
|
guint8 type,
|
|
guint8 subtype,
|
|
GError **error);
|
|
|
|
G_END_DECLS
|