From: Zbigniew Jędrzejewski-Szmek Date: Tue, 26 May 2020 19:08:10 +0000 (+0200) Subject: shared/efi-loader: remove check that uses absolute tick value X-Git-Tag: v246-rc1~268^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F15934%2Fhead;p=thirdparty%2Fsystemd.git shared/efi-loader: remove check that uses absolute tick value sd-boot uses rdtsc to set those timestamps. There is no guarantee that the tsc has any particular absolute value. On my VM: $ head /sys/firmware/efi/efivars/LoaderTime* ==> /sys/firmware/efi/efivars/LoaderTimeExecUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4397904074 ==> /sys/firmware/efi/efivars/LoaderTimeInitUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4396386839 ==> /sys/firmware/efi/efivars/LoaderTimeMenuUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f <== 4396392521 $ build/test-boot-timestamps ... LoaderTimeExecUSec=4396386839 too large, refusing. Failed to read EFI loader data: Input/output error Assertion 'q >= 0' failed at src/test/test-boot-timestamps.c:84, function main(). Aborting. (with patch) $ build/test-boot-timestamps ... EFI Loader: start=1h 13min 16.386s exit=1h 13min 17.904s duration=1.517s Firmware began 1h 13min 17.904074s before kernel. Loader began 1.517235s before kernel. Firmware began Tue 2020-05-26 11:04:13 CEST. Loader began Tue 2020-05-26 12:17:30 CEST. Kernel began Tue 2020-05-26 12:17:31 CEST. --- diff --git a/src/shared/efi-loader.c b/src/shared/efi-loader.c index 34196537b78..c288176fd18 100644 --- a/src/shared/efi-loader.c +++ b/src/shared/efi-loader.c @@ -531,15 +531,11 @@ int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) { if (r < 0) return log_debug_errno(r, "Failed to read LoaderTimeExecUSec: %m"); - if (y == 0 || y < x) + if (y == 0 || y < x || y - x > USEC_PER_HOUR) return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Bad LoaderTimeInitUSec=%"PRIu64", LoaderTimeExecUSec=%" PRIu64"; refusing.", x, y); - if (y > USEC_PER_HOUR) - return log_debug_errno(SYNTHETIC_ERRNO(EIO), - "LoaderTimeExecUSec=%"PRIu64" too large, refusing.", x); - *firmware = x; *loader = y;