mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-18 02:11:08 +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
122 lines
2.4 KiB
Meson
122 lines
2.4 KiB
Meson
subdir('efi')
|
|
|
|
cargs = ['-DG_LOG_DOMAIN="FuPluginUefi"']
|
|
|
|
efi_os_dir = get_option('efi_os_dir')
|
|
if efi_os_dir != ''
|
|
cargs += '-DEFI_OS_DIR="' + efi_os_dir + '"'
|
|
endif
|
|
|
|
install_data(['uefi.quirk'],
|
|
install_dir: join_paths(datadir, 'fwupd', 'quirks.d')
|
|
)
|
|
|
|
shared_module('fu_plugin_uefi',
|
|
fu_hash,
|
|
sources : [
|
|
'fu-plugin-uefi.c',
|
|
'fu-uefi-bgrt.c',
|
|
'fu-ucs2.c',
|
|
'fu-uefi-bootmgr.c',
|
|
'fu-uefi-common.c',
|
|
'fu-uefi-device.c',
|
|
'fu-uefi-devpath.c',
|
|
'fu-uefi-pcrs.c',
|
|
'fu-uefi-update-info.c',
|
|
'fu-uefi-vars.c',
|
|
],
|
|
include_directories : [
|
|
include_directories('../..'),
|
|
include_directories('../../src'),
|
|
include_directories('../../libfwupd'),
|
|
],
|
|
install : true,
|
|
install_dir: plugin_dir,
|
|
link_with : [
|
|
libfwupdprivate,
|
|
],
|
|
c_args : cargs,
|
|
dependencies : [
|
|
plugin_deps,
|
|
efivar,
|
|
efiboot,
|
|
],
|
|
)
|
|
|
|
executable(
|
|
'fwupdate',
|
|
resources_src,
|
|
fu_hash,
|
|
sources : [
|
|
'fu-uefi-tool.c',
|
|
'fu-uefi-bgrt.c',
|
|
'fu-ucs2.c',
|
|
'fu-uefi-bootmgr.c',
|
|
'fu-uefi-common.c',
|
|
'fu-uefi-device.c',
|
|
'fu-uefi-devpath.c',
|
|
'fu-uefi-pcrs.c',
|
|
'fu-uefi-update-info.c',
|
|
'fu-uefi-vars.c',
|
|
],
|
|
include_directories : [
|
|
include_directories('../..'),
|
|
include_directories('../../src'),
|
|
include_directories('../../libfwupd'),
|
|
],
|
|
dependencies : [
|
|
libxmlb,
|
|
giounix,
|
|
gusb,
|
|
gudev,
|
|
efivar,
|
|
efiboot,
|
|
],
|
|
link_with : [
|
|
libfwupdprivate,
|
|
],
|
|
install : true,
|
|
install_dir : join_paths(libexecdir, 'fwupd'),
|
|
c_args : cargs,
|
|
)
|
|
|
|
install_data(['uefi.conf'],
|
|
install_dir: join_paths(sysconfdir, 'fwupd')
|
|
)
|
|
|
|
if get_option('tests')
|
|
testdatadir = join_paths(meson.current_source_dir(), 'tests')
|
|
cargs += '-DTESTDATADIR="' + testdatadir + '"'
|
|
e = executable(
|
|
'uefi-self-test',
|
|
fu_hash,
|
|
sources : [
|
|
'fu-self-test.c',
|
|
'fu-uefi-bgrt.c',
|
|
'fu-uefi-bootmgr.c',
|
|
'fu-uefi-common.c',
|
|
'fu-uefi-device.c',
|
|
'fu-uefi-devpath.c',
|
|
'fu-uefi-pcrs.c',
|
|
'fu-uefi-update-info.c',
|
|
'fu-uefi-vars.c',
|
|
'fu-ucs2.c',
|
|
],
|
|
include_directories : [
|
|
include_directories('../..'),
|
|
include_directories('../../src'),
|
|
include_directories('../../libfwupd'),
|
|
],
|
|
dependencies : [
|
|
plugin_deps,
|
|
efivar,
|
|
efiboot,
|
|
],
|
|
link_with : [
|
|
libfwupdprivate,
|
|
],
|
|
c_args : cargs
|
|
)
|
|
test('uefi-self-test', e)
|
|
endif
|