[PATCH] uefi: uefirtmisc: Add null count argument check for GetNextHighMonotonicCount
Colin King
colin.king at canonical.com
Mon Mar 23 16:11:47 UTC 2015
From: Colin Ian King <colin.king at canonical.com>
Add a simple test for NULL count argumenent being passed into
the run time service GetNextHighMonotonicCount
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
efi_runtime/efi_runtime.c | 9 ++++++---
src/uefi/uefirtmisc/uefirtmisc.c | 28 ++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
index 638a817..31e5bb3 100644
--- a/efi_runtime/efi_runtime.c
+++ b/efi_runtime/efi_runtime.c
@@ -534,16 +534,19 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg)
pgetnexthighmonotoniccount = (struct
efi_getnexthighmonotoniccount __user *)arg;
- status = efi.get_next_high_mono_count(&count);
-
if (copy_from_user(&pgetnexthighmonotoniccount_local,
pgetnexthighmonotoniccount,
sizeof(pgetnexthighmonotoniccount_local)))
return -EFAULT;
+
+ status = efi.get_next_high_mono_count(
+ pgetnexthighmonotoniccount_local.HighCount ? &count : NULL);
+
if (put_user(status, pgetnexthighmonotoniccount_local.status))
return -EFAULT;
- if (put_user(count, pgetnexthighmonotoniccount_local.HighCount))
+ if (pgetnexthighmonotoniccount_local.HighCount &&
+ put_user(count, pgetnexthighmonotoniccount_local.HighCount))
return -EFAULT;
if (status != EFI_SUCCESS)
diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
index 91d7540..ab8b6c1 100644
--- a/src/uefi/uefirtmisc/uefirtmisc.c
+++ b/src/uefi/uefirtmisc/uefirtmisc.c
@@ -211,9 +211,37 @@ static int uefirtmisc_test2(fwts_framework *fw)
return FWTS_OK;
}
+static int uefirtmisc_test3(fwts_framework *fw)
+{
+ uint64_t status;
+ long ioret;
+ struct efi_getnexthighmonotoniccount getnexthighmonotoniccount;
+
+ getnexthighmonotoniccount.HighCount = NULL;
+ getnexthighmonotoniccount.status = &status;
+
+ ioret = ioctl(fd, EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT, &getnexthighmonotoniccount);
+ if (ioret == -1) {
+ if (status == EFI_INVALID_PARAMETER) {
+ fwts_passed(fw, "Test with invalid NULL parameter returned "
+ "EFI_INVALID_PARAMETER as expected.");
+ return FWTS_OK;
+ }
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCountInvalid",
+ "Failed to get correct return status from UEFI runtime service, expecting EFI_INVALID_PARAMETER.");
+ fwts_uefi_print_status_info(fw, status);
+ return FWTS_ERROR;
+ }
+ fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetNextHighMonotonicCountInvalid",
+ "Failed to get error return status from UEFI runtime service, expected EFI_INAVLID_PARAMETER.");
+ return FWTS_ERROR;
+}
+
+
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." },
{ NULL, NULL }
};
--
2.1.4
More information about the fwts-devel
mailing list