[PATCH 3/3][Resend] securebootcert: add Ubuntu UEFI secure boot test - check Ubuntu CA presence
IvanHu
ivan.hu at canonical.com
Tue Mar 5 09:21:46 UTC 2013
On 03/05/2013 05:13 PM, Colin Ian King wrote:
> On 05/03/13 09:09, Colin Ian King wrote:
>> On 05/03/13 09:03, Ivan Hu wrote:
>>> From: IvanHu <ivan.hu at canonical.com>
>>>
>>> Check the variable KEK existence and Ubuntu master CA certificate
>>> presence
>>> in KEK.
>>>
>>> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
>>> ---
>>> src/uefi/securebootcert/securebootcert.c | 37
>>> ++++++++++++++++++++++++++++++
>>> 1 file changed, 37 insertions(+)
>>>
>>> diff --git a/src/uefi/securebootcert/securebootcert.c
>>> b/src/uefi/securebootcert/securebootcert.c
>>> index 60d55cb..0675e15 100644
>>> --- a/src/uefi/securebootcert/securebootcert.c
>>> +++ b/src/uefi/securebootcert/securebootcert.c
>>> @@ -253,10 +253,44 @@ static void
>>> securebootcert_data_base(fwts_framework *fw, fwts_uefi_var *var, cha
>>> "The Microsoft UEFI CA certificate not found .");
>>> }
>>>
>>> +static void securebootcert_key_ex_key(fwts_framework *fw,
>>> fwts_uefi_var *var, char *varname)
>>> +{
>>> +
>>> + bool ident = false;
>>> + EFI_GUID global_var_guid = EFI_GLOBAL_VARIABLE;
>>> +
>>> + if (strcmp(varname, "KEK"))
>>> + return;
>>> +
>>> + var_found |= VAR_KEK_FOUND;
>>> + ident = compare_guid(&global_var_guid, var->guid);
>>> +
>>> + if (!ident) {
>>> + fwts_failed(fw, LOG_LEVEL_HIGH,
>>> "SecureBootCertVariableGUIDInvalid",
>>> + "The secure boot variable %s GUID invalid.", varname);
>>> + return;
>>> + }
>>> +
>>> + fwts_release *release = fwts_release_get();
>>> + if (release == NULL) {
>>> + fwts_skipped(fw, "Not on Ubuntu system, it's not necessary
>>> checking the Ubuntu Master CA certificate.");
>>> + return;
>>> + }
>>
>> Perhaps I should have explained the fwts_release API better. Best to do
>> something like:
>>
>> fwts_release *release;
>>
>> ...
>> ...
>>
>> release = fwts_release_get();
>> if (release == NULL) {
>> fwts_skipped(fw, "Cannot determine system.. etc...");
>> return;
>> }
>>
>> if (!strcmp(release->distributor, "Ubuntu")) {
>> fwts_skipped(fw, "Not a Ubuntu system... etc..");
>> return;
>> }
>>
>
> Oh, and I forgot, we need to free up after using it:
>
> fwts_release_free(release);
>
>
>
>>> +
>>> + fwts_log_info_verbatum(fw, "Check Ubuntu master CA certificate
>>> presence in %s", varname);
>>> + if (check_sigdb_presence(var->data, var->datalen, ubuntu_key,
>>> ubuntu_key_len))
>>> + fwts_passed(fw, "Ubuntu UEFI CA 2011 key check passed.");
>>> + else {
>>> + fwts_log_info_verbatum(fw, "No Ubuntu master CA certificate
>>> presence in %s", varname);
>>> + fwts_infoonly(fw);
>>> + }
>>> +}
>>> +
>>> static securebootcert_info securebootcert_info_table[] = {
>>> { "SecureBoot", securebootcert_secure_boot },
>>> { "SetupMode", securebootcert_setup_mode },
>>> { "db", securebootcert_data_base },
>>> + { "KEK", securebootcert_key_ex_key },
>>> { NULL, NULL }
>>> };
>>>
>>> @@ -358,6 +392,9 @@ static int securebootcert_test1(fwts_framework *fw)
>>> if (!(var_found & VAR_DB_FOUND))
>>> fwts_failed(fw, LOG_LEVEL_HIGH,
>>> "SecureBootCertVariableNotFound",
>>> "The secure boot variable DB not found.");
>>> + if (!(var_found & VAR_KEK_FOUND))
>>> + fwts_failed(fw, LOG_LEVEL_HIGH,
>>> "SecureBootCertVariableNotFound",
>>> + "The secure boot variable KEK not found.");
>>>
>>> fwts_uefi_free_variable_names(&name_list);
>>>
>>>
>>
>>
>
>
Thanks, will resend patch latter.
Ivan
More information about the fwts-devel
mailing list