From cdbc6b526624cec6a3d6769b9184516e5247c98d Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Thu, 29 Sep 2022 12:55:07 +0100 Subject: [PATCH] Fix installing the dbx update when not using fwupdtool --force Fixes https://github.com/fwupd/fwupd/issues/5089 --- libfwupdplugin/fu-efi-signature-list.c | 1 + libfwupdplugin/fu-firmware.c | 7 ++++++- libfwupdplugin/fu-firmware.h | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libfwupdplugin/fu-efi-signature-list.c b/libfwupdplugin/fu-efi-signature-list.c index 532eb26b8..c6073797e 100644 --- a/libfwupdplugin/fu-efi-signature-list.c +++ b/libfwupdplugin/fu-efi-signature-list.c @@ -393,4 +393,5 @@ fu_efi_signature_list_class_init(FuEfiSignatureListClass *klass) static void fu_efi_signature_list_init(FuEfiSignatureList *self) { + fu_firmware_add_flag(FU_FIRMWARE(self), FU_FIRMWARE_FLAG_ALWAYS_SEARCH); } diff --git a/libfwupdplugin/fu-firmware.c b/libfwupdplugin/fu-firmware.c index 56ed9504a..b66009d48 100644 --- a/libfwupdplugin/fu-firmware.c +++ b/libfwupdplugin/fu-firmware.c @@ -76,6 +76,8 @@ fu_firmware_flag_to_string(FuFirmwareFlags flag) return "done-parse"; if (flag == FU_FIRMWARE_FLAG_HAS_STORED_SIZE) return "has-stored-size"; + if (flag == FU_FIRMWARE_FLAG_ALWAYS_SEARCH) + return "always-search"; return NULL; } @@ -104,6 +106,8 @@ fu_firmware_flag_from_string(const gchar *flag) return FU_FIRMWARE_FLAG_DONE_PARSE; if (g_strcmp0(flag, "has-stored-size") == 0) return FU_FIRMWARE_FLAG_HAS_STORED_SIZE; + if (g_strcmp0(flag, "always-search") == 0) + return FU_FIRMWARE_FLAG_ALWAYS_SEARCH; return FU_FIRMWARE_FLAG_NONE; } @@ -816,7 +820,8 @@ fu_firmware_check_magic_for_offset(FuFirmware *self, return TRUE; /* fuzzing */ - if ((flags & FWUPD_INSTALL_FLAG_NO_SEARCH) > 0) { + if (!fu_firmware_has_flag(self, FU_FIRMWARE_FLAG_ALWAYS_SEARCH) && + (flags & FWUPD_INSTALL_FLAG_NO_SEARCH) > 0) { if (!klass->check_magic(self, fw, *offset, error)) { g_prefix_error(error, "not searching magic due to install flags: "); return FALSE; diff --git a/libfwupdplugin/fu-firmware.h b/libfwupdplugin/fu-firmware.h index ce26c3f4e..0d02229b0 100644 --- a/libfwupdplugin/fu-firmware.h +++ b/libfwupdplugin/fu-firmware.h @@ -125,6 +125,16 @@ struct _FuFirmwareClass { * Since: 1.8.2 **/ #define FU_FIRMWARE_FLAG_HAS_STORED_SIZE (1u << 5) +/** + * FU_FIRMWARE_FLAG_ALWAYS_SEARCH: + * + * Always searches for magic regardless of the install flags. + * This is useful for firmware that always has an *unparsed* variable-length + * header. + * + * Since: 1.8.6 + **/ +#define FU_FIRMWARE_FLAG_ALWAYS_SEARCH (1u << 6) /** * FuFirmwareFlags: