[Skiboot] [PATCH v2 02/20] libstb: import stb_init() breaking it into multiple files

Stewart Smith stewart at linux.vnet.ibm.com
Thu Dec 14 11:56:11 AEDT 2017


Claudio Carvalho <cclaudio at linux.vnet.ibm.com> writes:
> On 13/12/2017 07:51, Stewart Smith wrote:
>> Claudio Carvalho <cclaudio at linux.vnet.ibm.com> writes:
>>> diff --git a/libstb/secureboot.c b/libstb/secureboot.c
>>> new file mode 100644
>>> index 0000000..cdb6ea5
>>> --- /dev/null
>>> +++ b/libstb/secureboot.c
>> <snip>
>>> +void secureboot_init(void)
>>> +{
>>> +	struct dt_node *node;
>>> +	const char *hash_algo;
>>> +	const char *compat = NULL;
>>> +	int version;
>>> +	size_t size;
>>> +
>>> +	node = dt_find_by_path(dt_root, "/ibm,secureboot");
>>> +	if (!node) {
>>> +		prlog(PR_NOTICE, "secure boot not supported\n");
>>> +		return;
>>> +	}
>>> +
>>> +	if (!secureboot_is_compatible(node, &version, &compat)) {
>>> +		/**
>>> +		 * @fwts-label SecureBootNotCompatible
>>> +		 * @fwts-advice Compatible secureboot driver not found. Probably,
>>> +		 * hostboot/mambo/skiboot has updated the
>>> +		 * /ibm,secureboot/compatible without adding a driver that
>>> +		 * supports it.
>>> +		 */
>>> +		prlog(PR_ERR, "%s FAILED, /ibm,secureboot not compatible.\n",
>>> +		      __func__);
>>> +		return;
>>> +	}
>>> +
>>> +	prlog(PR_NOTICE, "Found %s\n", compat);
>>> +
>>> +	if (nvram_query_eq("force-secure-mode", "always")) {
>>> +		secure_mode = true;
>>> +		prlog(PR_NOTICE, "secure mode on (FORCED by nvram)\n");
>>> +	} else {
>>> +		secure_mode = dt_has_node_property(node, "secure-enabled", NULL);
>>> +		prlog(PR_NOTICE, "secure mode %s\n",
>>> +		      secure_mode ? "on" : "off");
>>> +	}
>>> +
>>> +	if (!secure_mode)
>>> +		return;
>> I'm thinking we should skip this check here, and do the verification and
>> measurement no matter what, keeping only the check in
>> secureboot_enforce(). IIRC this is a change from P8 behavior, but
>> considering we're aiming for "secure boot everywhere", it seems like a
>> good idea.
>>
>> (It's also useful for testing that things are still working well without
>> having to use the nvram trick).
>>
>> I can do that as part of merging if you like.
>>
>
> I think we still need to keep this check here. If the system is *not* 
> booting in secure mode, why do we need to spend cpu cycles and resources 
> initializing the secureboot dependencies such as the Container 
> Verification Code? The dependencies won't be used during boot (and at 
> runtime).

I was going along the line of thought that we may be able to spot some
corruption/problem using that infrastructure or at least *warn* the user
that their firmware *might* not be what they want it to be.

Also, it saves me having to go and flip the jumper on remote machines to
ensure that the code still works :)

(to be honest, the "not having to go flip a jumper" motivation is pretty
high for me)

-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Skiboot mailing list