[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fwts-devel
Subject:    ACK: [PATCH 5/5 V2] uefirtmisc: add unsupported checking with RuntimeServicesSupported variable
From:       Alex Hung <alex.hung () canonical ! com>
Date:       2019-11-07 16:38:52
Message-ID: 03996427-9087-b320-231d-45d30ea99f37 () canonical ! com
[Download RAW message or body]

On 2019-11-07 12:46 a.m., 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@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: Alex Hung <alex.hung@canonical.com>

-- 
fwts-devel mailing list
fwts-devel@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/fwts-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic