1
0
mirror of https://github.com/systemd/systemd synced 2024-07-01 07:34:28 +00:00

stub: fix reporting of dtb measurement

Let's properly return the measurement flag tristate, rather than a
boolean. Otherwise we'll mistake "nothing to measure" as "not measured",
which are two different things, and means we'll miscombine the flag
later, claiming to userspace that we measured no dtb data even if there
was.
This commit is contained in:
Lennart Poettering 2024-06-24 12:52:57 +02:00
parent d0c441f99e
commit 2cadbc21ae

View File

@ -26,7 +26,7 @@ DECLARE_NOALLOC_SECTION(".sdmagic", "#### LoaderInfo: systemd-stub " GIT_VERSION
DECLARE_SBAT(SBAT_STUB_SECTION_TEXT);
static void combine_measured_flag(int *value, bool measured) {
static void combine_measured_flag(int *value, int measured) {
assert(value);
/* Combine the "measured" flag in a sensible way: if we haven't measured anything yet, the first
@ -39,6 +39,9 @@ static void combine_measured_flag(int *value, bool measured) {
* < 0 nothing has been submitted for measurement so far
*/
if (measured < 0)
return;
*value = *value < 0 ? measured : *value && measured;
}
@ -302,7 +305,7 @@ static void dtb_install_addons(
size_t *dt_sizes,
char16_t **dt_filenames,
size_t n_dts,
bool *ret_parameters_measured) {
int *ret_parameters_measured) {
int parameters_measured = -1;
EFI_STATUS err;
@ -735,20 +738,22 @@ static EFI_STATUS run(EFI_HANDLE image) {
log_error_status(err, "Error loading embedded devicetree: %m");
}
int dtb_measured;
dtb_install_addons(&dt_state,
dt_bases_addons_global,
dt_sizes_addons_global,
dt_filenames_addons_global,
n_dts_addons_global,
&m);
combine_measured_flag(&parameters_measured, m);
&dtb_measured);
combine_measured_flag(&parameters_measured, dtb_measured);
dtb_install_addons(&dt_state,
dt_bases_addons_uki,
dt_sizes_addons_uki,
dt_filenames_addons_uki,
n_dts_addons_uki,
&m);
combine_measured_flag(&parameters_measured, m);
&dtb_measured);
combine_measured_flag(&parameters_measured, dtb_measured);
if (parameters_measured > 0)
(void) efivar_set_uint_string(MAKE_GUID_PTR(LOADER), u"StubPcrKernelParameters", TPM2_PCR_KERNEL_CONFIG, 0);