Fix installing the dbx update when not using fwupdtool --force

Fixes https://github.com/fwupd/fwupd/issues/5089
This commit is contained in:
Richard Hughes 2022-09-29 12:55:07 +01:00
parent ae70c210c5
commit cdbc6b5266
3 changed files with 17 additions and 1 deletions

View File

@ -393,4 +393,5 @@ fu_efi_signature_list_class_init(FuEfiSignatureListClass *klass)
static void static void
fu_efi_signature_list_init(FuEfiSignatureList *self) fu_efi_signature_list_init(FuEfiSignatureList *self)
{ {
fu_firmware_add_flag(FU_FIRMWARE(self), FU_FIRMWARE_FLAG_ALWAYS_SEARCH);
} }

View File

@ -76,6 +76,8 @@ fu_firmware_flag_to_string(FuFirmwareFlags flag)
return "done-parse"; return "done-parse";
if (flag == FU_FIRMWARE_FLAG_HAS_STORED_SIZE) if (flag == FU_FIRMWARE_FLAG_HAS_STORED_SIZE)
return "has-stored-size"; return "has-stored-size";
if (flag == FU_FIRMWARE_FLAG_ALWAYS_SEARCH)
return "always-search";
return NULL; return NULL;
} }
@ -104,6 +106,8 @@ fu_firmware_flag_from_string(const gchar *flag)
return FU_FIRMWARE_FLAG_DONE_PARSE; return FU_FIRMWARE_FLAG_DONE_PARSE;
if (g_strcmp0(flag, "has-stored-size") == 0) if (g_strcmp0(flag, "has-stored-size") == 0)
return FU_FIRMWARE_FLAG_HAS_STORED_SIZE; 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; return FU_FIRMWARE_FLAG_NONE;
} }
@ -816,7 +820,8 @@ fu_firmware_check_magic_for_offset(FuFirmware *self,
return TRUE; return TRUE;
/* fuzzing */ /* 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)) { if (!klass->check_magic(self, fw, *offset, error)) {
g_prefix_error(error, "not searching magic due to install flags: "); g_prefix_error(error, "not searching magic due to install flags: ");
return FALSE; return FALSE;

View File

@ -125,6 +125,16 @@ struct _FuFirmwareClass {
* Since: 1.8.2 * Since: 1.8.2
**/ **/
#define FU_FIRMWARE_FLAG_HAS_STORED_SIZE (1u << 5) #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: * FuFirmwareFlags: