From 01c73317cc106f6cf545687327c83273d4294f33 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 2 Sep 2018 11:48:16 +0200 Subject: [PATCH] [KMTESTS:CC] Add tests showing our CcMapData/CcPinRead raise invalid status --- .../rostests/kmtests/ntos_cc/CcMapData_drv.c | 43 +++++++++++++++++++ .../rostests/kmtests/ntos_cc/CcMapData_user.c | 3 +- .../rostests/kmtests/ntos_cc/CcPinRead_drv.c | 43 +++++++++++++++++++ .../rostests/kmtests/ntos_cc/CcPinRead_user.c | 3 +- 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/modules/rostests/kmtests/ntos_cc/CcMapData_drv.c b/modules/rostests/kmtests/ntos_cc/CcMapData_drv.c index 516d55fe22d..3e86a3a55cd 100644 --- a/modules/rostests/kmtests/ntos_cc/CcMapData_drv.c +++ b/modules/rostests/kmtests/ntos_cc/CcMapData_drv.c @@ -326,6 +326,49 @@ PerformTest( ExFreePool(TestContext); } } + else if (TestId == 4) + { + /* Map after EOF */ + Ret = FALSE; + Offset.QuadPart = FileSizes.FileSize.QuadPart + 0x1000; + + KmtStartSeh(); + Ret = CcMapData(TestFileObject, &Offset, 0x1000, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_SUCCESS); + + if (!skip(Ret == TRUE, "CcMapData failed\n")) + { + CcUnpinData(Bcb); + } + + /* Map a VACB after EOF */ + Ret = FALSE; + Offset.QuadPart = FileSizes.FileSize.QuadPart + 0x1000 + VACB_MAPPING_GRANULARITY; + + KmtStartSeh(); + Ret = CcMapData(TestFileObject, &Offset, 0x1000, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_ACCESS_VIOLATION); + ok(Ret == FALSE, "CcMapData succeed\n"); + + if (Ret) + { + CcUnpinData(Bcb); + } + + /* Map more than a VACB */ + Ret = FALSE; + Offset.QuadPart = 0x0; + + KmtStartSeh(); + Ret = CcMapData(TestFileObject, &Offset, 0x1000 + VACB_MAPPING_GRANULARITY, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_SUCCESS); + ok(Ret == FALSE, "CcMapData succeed\n"); + + if (Ret) + { + CcUnpinData(Bcb); + } + } } } } diff --git a/modules/rostests/kmtests/ntos_cc/CcMapData_user.c b/modules/rostests/kmtests/ntos_cc/CcMapData_user.c index b1d2685f763..dee2a93d5ee 100644 --- a/modules/rostests/kmtests/ntos_cc/CcMapData_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcMapData_user.c @@ -20,8 +20,9 @@ START_TEST(CcMapData) /* 3 tests for offset * 1 test for BCB + * 1 test for length/offset */ - for (TestId = 0; TestId < 4; ++TestId) + for (TestId = 0; TestId < 5; ++TestId) { Ret = KmtSendUlongToDriver(IOCTL_START_TEST, TestId); ok(Ret == ERROR_SUCCESS, "KmtSendUlongToDriver failed: %lx\n", Ret); diff --git a/modules/rostests/kmtests/ntos_cc/CcPinRead_drv.c b/modules/rostests/kmtests/ntos_cc/CcPinRead_drv.c index 58f8808fcda..9c338fe785f 100644 --- a/modules/rostests/kmtests/ntos_cc/CcPinRead_drv.c +++ b/modules/rostests/kmtests/ntos_cc/CcPinRead_drv.c @@ -477,6 +477,49 @@ PerformTest( CcUnpinData(Bcb); } } + else if (TestId == 5) + { + /* Pin after EOF */ + Ret = FALSE; + Offset.QuadPart = FileSizes.FileSize.QuadPart + 0x1000; + + KmtStartSeh(); + Ret = CcPinRead(TestFileObject, &Offset, 0x1000, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_SUCCESS); + + if (!skip(Ret == TRUE, "CcPinRead failed\n")) + { + CcUnpinData(Bcb); + } + + /* Pin a VACB after EOF */ + Ret = FALSE; + Offset.QuadPart = FileSizes.FileSize.QuadPart + 0x1000 + VACB_MAPPING_GRANULARITY; + + KmtStartSeh(); + Ret = CcPinRead(TestFileObject, &Offset, 0x1000, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_ACCESS_VIOLATION); + ok(Ret == FALSE, "CcPinRead succeed\n"); + + if (Ret) + { + CcUnpinData(Bcb); + } + + /* Pin more than a VACB */ + Ret = FALSE; + Offset.QuadPart = 0x0; + + KmtStartSeh(); + Ret = CcPinRead(TestFileObject, &Offset, 0x1000 + VACB_MAPPING_GRANULARITY, 0, &Bcb, (PVOID *)&Buffer); + KmtEndSeh(STATUS_SUCCESS); + ok(Ret == FALSE, "CcPinRead succeed\n"); + + if (Ret) + { + CcUnpinData(Bcb); + } + } } } } diff --git a/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c b/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c index 78818164e8c..e8e78cbc44c 100644 --- a/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c +++ b/modules/rostests/kmtests/ntos_cc/CcPinRead_user.c @@ -21,8 +21,9 @@ START_TEST(CcPinRead) /* 3 tests for offset * 1 test for BCB * 1 test for pinning access + * 1 test for length/offset */ - for (TestId = 0; TestId < 5; ++TestId) + for (TestId = 0; TestId < 6; ++TestId) { Ret = KmtSendUlongToDriver(IOCTL_START_TEST, TestId); ok(Ret == ERROR_SUCCESS, "KmtSendUlongToDriver failed: %lx\n", Ret);