ACK: [PATCH 5/5 V2] uefirtmisc: add unsupported checking with RuntimeServicesSupported variable
Colin Ian King
colin.king at canonical.com
Thu Nov 7 08:08:24 UTC 2019
On 07/11/2019 07:46, Ivan Hu wrote:
> UEFI spec 2.8 introduced the variable RuntimeServicesSupported, which is
> Bitmask of which calls are implemented by the firmware during runtime services.
> Add tests for checking GetNextHighMonotonicCount services with
> RuntimeServicesSupported variable. Currently, won't test with
> QueryCapsuleCapabilities becasue QueryCapsuleCapabilities may return
> unsupported due to the update flag of firmware behavior unsupported, not
> runtime service unsupported.
>
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
> src/uefi/uefirtmisc/uefirtmisc.c | 78 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 78 insertions(+)
>
> diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
> index 2270ca5..a0a4c4c 100644
> --- a/src/uefi/uefirtmisc/uefirtmisc.c
> +++ b/src/uefi/uefirtmisc/uefirtmisc.c
> @@ -254,11 +254,89 @@ static int uefirtmisc_test3(fwts_framework *fw)
> return FWTS_ERROR;
> }
>
> +static int uefirtmisc_test4(fwts_framework *fw)
> +{
> + long ioret;
> + uint64_t status;
> + bool getvar_supported;
> + uint32_t var_runtimeservicessupported;
> +
> + struct efi_getnexthighmonotoniccount getnexthighmonotoniccount;
> + uint32_t highcount;
> +
> + fwts_uefi_rt_support_status_get(fd, &getvar_supported,
> + &var_runtimeservicessupported);
> + if (!getvar_supported || (var_runtimeservicessupported == 0xFFFF)) {
> + fwts_skipped(fw, "Cannot get the RuntimeServicesSupported "
> + "variable, maybe the runtime service "
> + "GetVariable is not supported or "
> + "RuntimeServicesSupported not provided by "
> + "firmware.");
> + return FWTS_SKIP;
> + }
> +
> + getnexthighmonotoniccount.HighCount = &highcount;
> + getnexthighmonotoniccount.status = &status;
> + status = ~0ULL;
> + ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT, &getnexthighmonotoniccount);
> + if (ioret == -1) {
> + if (status == EFI_UNSUPPORTED) {
> + if ((var_runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)
> + || (var_runtimeservicessupported == 0)) {
> + fwts_failed(fw, LOG_LEVEL_HIGH,
> + "UEFIRuntimeGetNextHighMonotonicCount",
> + "Get the GetNextHighMonotonicCount runtime "
> + "service supported via RuntimeServicesSupported "
> + "variable. But actually is not supported by "
> + "firmware.");
> + } else {
> + fwts_passed(fw, "UEFI GetNextHighMonotonicCount runtime "
> + "service supported status test passed.");
> + }
> + } else {
> + if (status == ~0ULL) {
> + fwts_skipped(fw, "Unknown error occurred, skip test.");
> + return FWTS_SKIP;
> + }
> + if ((var_runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)
> + || (var_runtimeservicessupported == 0)) {
> + fwts_passed(fw, "UEFI GetNextHighMonotonicCount runtime "
> + "service supported status test passed.");
> + } else {
> + fwts_failed(fw, LOG_LEVEL_HIGH,
> + "UEFIRuntimeGetNextHighMonotonicCount",
> + "Get the GetNextHighMonotonicCount runtime "
> + "service unsupported via RuntimeServicesSupported "
> + "variable. But actually is supported by firmware.");
> + }
> + }
> + } else {
> + if (status != EFI_SUCCESS ) {
> + fwts_skipped(fw, "Unknown error occurred, skip test.");
> + return FWTS_SKIP;
> + }
> + if ((var_runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_HIGH_MONOTONIC_COUNT)
> + || (var_runtimeservicessupported == 0)) {
> + fwts_passed(fw, "UEFI GetNextHighMonotonicCount runtime "
> + "service supported status test passed.");
> + } else {
> + fwts_failed(fw, LOG_LEVEL_HIGH,
> + "UEFIRuntimeGetNextHighMonotonicCount",
> + "Get the GetNextHighMonotonicCount runtime "
> + "service unsupported via RuntimeServicesSupported "
> + "variable. But actually is supported by firmware.");
> + }
> + }
> +
> + return FWTS_OK;
> +}
> +
>
> static fwts_framework_minor_test uefirtmisc_tests[] = {
> { uefirtmisc_test1, "Test for UEFI miscellaneous runtime service interfaces." },
> { uefirtmisc_test2, "Stress test for UEFI miscellaneous runtime service interfaces." },
> { uefirtmisc_test3, "Test GetNextHighMonotonicCount with invalid NULL parameter." },
> + { uefirtmisc_test4, "Test UEFI miscellaneous runtime services supported status." },
> { NULL, NULL }
> };
>
>
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the fwts-devel
mailing list