ACK: [PATCH 3/4] uefirtvariable: check variable runtime services supported before testing (LP: #1913351)
Alex Hung
alex.hung at canonical.com
Thu May 13 19:24:15 UTC 2021
On 2021-05-13 4:01 a.m., Ivan Hu wrote:
> UEFI runtime tests are being done without checking RTPROT table which
> intruduced after UEFI 2.8a. This might lead to false alarm for those
> unsupported runtime service platforms. Add checking the variable services
> supported status before runing the related tests.
>
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
> src/uefi/uefirtvariable/uefirtvariable.c | 109 +++++++++++++++++++++++
> 1 file changed, 109 insertions(+)
>
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index db0e80bb..b756ac96 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -134,6 +134,12 @@ static int getvariable_test(
> uint8_t data[datasize];
> uint32_t i;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> for (dataindex = 0; dataindex < datasize; dataindex++)
> data[dataindex] = (uint8_t)dataindex;
>
> @@ -169,6 +175,12 @@ static int getvariable_test(
> return FWTS_ERROR;
> }
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, GetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> getvariable.VariableName = varname;
> getvariable.VendorGuid = >estguid1;
> getvariable.Attributes = &attributestest;
> @@ -311,6 +323,12 @@ static int getnextvariable_test1(fwts_framework *fw)
> bool found_name = false, found_guid = false;
> int ret = FWTS_OK;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> for (dataindex = 0; dataindex < datasize; dataindex++)
> data[dataindex] = (uint8_t)dataindex;
>
> @@ -346,6 +364,12 @@ static int getnextvariable_test1(fwts_framework *fw)
> return FWTS_ERROR;
> }
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
> + fwts_skipped(fw, "Skipping test, GetNextVariableName runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> variablename = malloc(sizeof(uint16_t) * variablenamesize);
> if (!variablename) {
> fwts_skipped(fw, "Unable to alloc memory for variable name");
> @@ -497,6 +521,12 @@ static int getnextvariable_test2(fwts_framework *fw)
> EFI_GUID vendorguid;
> int ret = FWTS_OK;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
> + fwts_skipped(fw, "Skipping test, GetNextVariableName runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> variablename = malloc(sizeof(uint16_t) * variablenamesize);
> if (!variablename) {
> fwts_skipped(fw, "Unable to alloc memory for variable name");
> @@ -662,6 +692,12 @@ static int getnextvariable_test3(fwts_framework *fw)
> EFI_GUID vendorguid;
> int ret;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
> + fwts_skipped(fw, "Skipping test, GetNextVariableName runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> variablename = malloc(sizeof(uint16_t) * variablenamesize);
> if (!variablename) {
> fwts_skipped(fw, "Unable to alloc memory for variable name");
> @@ -795,6 +831,12 @@ static int getnextvariable_test4(fwts_framework *fw)
> uint16_t variablename[MAX_DATA_LENGTH];
> EFI_GUID vendorguid;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
> + fwts_skipped(fw, "Skipping test, GetNextVariableName runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> getnextvariablename.VariableNameSize = &variablenamesize;
> getnextvariablename.VendorGuid = &vendorguid;
> getnextvariablename.status = &status;
> @@ -912,6 +954,12 @@ static int setvariable_insertvariable(
>
> uint8_t data[datasize + 1];
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> for (dataindex = 0; dataindex < datasize; dataindex++)
> data[dataindex] = (uint8_t)dataindex + datadiff;
>
> @@ -987,6 +1035,12 @@ static int setvariable_checkvariable(
> uint64_t getdatasize = sizeof(testdata);
> uint32_t attributestest;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, GetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> getvariable.VariableName = varname;
> getvariable.VendorGuid = gtestguid;
> getvariable.Attributes = &attributestest;
> @@ -1047,6 +1101,12 @@ static int setvariable_checkvariable_notfound(
> uint64_t getdatasize = sizeof(testdata);
> uint32_t attributestest;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, GetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> getvariable.VariableName = varname;
> getvariable.VendorGuid = gtestguid;
> getvariable.Attributes = &attributestest;
> @@ -1086,6 +1146,13 @@ static int setvariable_invalidattr(
> uint64_t dataindex;
> uint8_t data[datasize];
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> +
> for (dataindex = 0; dataindex < datasize; dataindex++)
> data[dataindex] = (uint8_t)dataindex + datadiff;
>
> @@ -1437,6 +1504,12 @@ static int setvariable_test8(fwts_framework *fw)
> uint8_t data = 1;
> uint64_t status = ~0ULL;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> setvariable.VariableName = variablenametest;
> setvariable.VendorGuid = >estguid1;
> setvariable.Attributes = attr;
> @@ -1500,6 +1573,12 @@ static int getnextvariable_multitest(
> uint16_t variablename[MAX_DATA_LENGTH];
> EFI_GUID vendorguid;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> for (dataindex = 0; dataindex < datasize; dataindex++)
> data[dataindex] = (uint8_t)dataindex;
>
> @@ -1534,6 +1613,12 @@ static int getnextvariable_multitest(
> return FWTS_ERROR;
> }
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
> + fwts_skipped(fw, "Skipping test, GetNextVariableName runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> getnextvariablename.VariableNameSize = &variablenamesize;
> getnextvariablename.VariableName = variablename;
> getnextvariablename.VendorGuid = &vendorguid;
> @@ -1697,6 +1782,12 @@ static int uefirtvariable_test4(fwts_framework *fw)
> uint64_t remvarstoragesize;
> uint64_t maxvariablesize;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO)) {
> + fwts_skipped(fw, "Skipping test, QueryVariableInfo runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> if (status == EFI_UNSUPPORTED) {
> fwts_skipped(fw,
> @@ -1846,6 +1937,12 @@ static int uefirtvariable_test7(fwts_framework *fw)
> fwts_log_info(fw, "Testing QueryVariableInfo on querying the variable %" PRIu32
> " times.", uefi_query_variable_multiple);
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_QUERY_VARIABLE_INFO)) {
> + fwts_skipped(fw, "Skipping test, QueryVariableInfo runtime "
> + "service is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> /* first check if the firmware support QueryVariableInfo interface */
> if (do_queryvariableinfo(&status, &remvarstoragesize, &maxvariablesize) == FWTS_ERROR) {
> if (status == EFI_UNSUPPORTED) {
> @@ -1890,6 +1987,12 @@ static void getvariable_test_invalid(
> {
> long ioret;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_GET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, GetVariable runtime service "
> + "is not supported on this platform.");
> + return;
> + }
> +
> fwts_log_info(fw, "Testing GetVariable with %s.", test);
> *(getvariable->status) = ~0ULL;
>
> @@ -1933,6 +2036,12 @@ static int uefirtvariable_test8(fwts_framework *fw)
> uint32_t attr;
> int ioret;
>
> + if (!(runtimeservicessupported & EFI_RT_SUPPORTED_SET_VARIABLE)) {
> + fwts_skipped(fw, "Skipping test, SetVariable runtime service "
> + "is not supported on this platform.");
> + return FWTS_SKIP;
> + }
> +
> for (dataindex = 0; dataindex < sizeof(data); dataindex++)
> data[dataindex] = (uint8_t)dataindex;
>
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list