diff options
Diffstat (limited to 'futility/updater_quirks.c')
-rw-r--r-- | futility/updater_quirks.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/futility/updater_quirks.c b/futility/updater_quirks.c index 1dfbedda..a2015f62 100644 --- a/futility/updater_quirks.c +++ b/futility/updater_quirks.c @@ -55,6 +55,8 @@ static const struct quirks_record quirks_records[] = { { .match = "Google_Reks.", .quirks = "allow_empty_wltag" }, { .match = "Google_Relm.", .quirks = "allow_empty_wltag" }, { .match = "Google_Wizpig.", .quirks = "allow_empty_wltag" }, + + { .match = "Google_Phaser.", .quirks = "override_signature_id" }, }; /* Preserves meta data and reload image contents from given file path. */ @@ -423,6 +425,12 @@ void updater_register_quirks(struct updater_config *cfg) quirks->help = "chromium/1024401; recover EC by partial RO update."; quirks->apply = quirk_ec_partial_recovery; quirks->value = -1; /* Decide at runtime. */ + + quirks = &cfg->quirks[QUIRK_OVERRIDE_SIGNATURE_ID]; + quirks->name = "override_signature_id"; + quirks->help = "chromium/146876241; override signature id for " + "devices shipped with different root key."; + quirks->apply = NULL; /* Simple config. */ } /* @@ -448,3 +456,30 @@ const char * const updater_get_default_quirks(struct updater_config *cfg) } return NULL; } + +/* + * Overrides signature id if the device was shipped with known + * special rootkey. + */ +int quirk_override_signature_id(struct updater_config *cfg, + struct model_config *model, + const char **signature_id) +{ + const char * const DOPEFISH_KEY_HASH = + "9a1f2cc319e2f2e61237dc51125e35ddd4d20984"; + + /* b/146876241 */ + assert(model); + if (strcmp(model->name, "phaser360") == 0) { + struct firmware_image *image = &cfg->image_current; + const char *key_hash = get_firmware_rootkey_hash(image); + if (key_hash && strcmp(key_hash, DOPEFISH_KEY_HASH) == 0) { + const char * const sig_dopefish = "phaser360-dopefish"; + WARN("A Phaser360 with Dopefish rootkey - " + "override signature_id to '%s'.\n", sig_dopefish); + *signature_id = sig_dopefish; + } + } + + return 0; +} |