[NTDLL_APITEST] Add alignment probing tests for Query/Set information thread related routines

This commit is contained in:
George Bișoc 2021-05-02 20:58:40 +02:00
parent 3b53b3d07f
commit efaa7b6a24
No known key found for this signature in database
GPG key ID: 688C4FBE25D7DEF6
2 changed files with 68 additions and 0 deletions

View file

@ -6,6 +6,7 @@
*/
#include "precomp.h"
#include <internal/ps_i.h>
static
void
@ -100,7 +101,40 @@ Test_ThreadBasicInformationClass(void)
HeapFree(GetProcessHeap(), 0, ThreadInfoBasic);
}
static
void
Test_ThreadQueryAlignmentProbe(void)
{
ULONG InfoClass;
/* Iterate over the process info classes and begin the tests */
for (InfoClass = 0; InfoClass < _countof(PsThreadInfoClass); InfoClass++)
{
/* The buffer is misaligned */
QuerySetThreadValidator(QUERY,
InfoClass,
(PVOID)(ULONG_PTR)1,
PsThreadInfoClass[InfoClass].RequiredSizeQUERY,
STATUS_DATATYPE_MISALIGNMENT);
/* We query an invalid buffer address */
QuerySetThreadValidator(QUERY,
InfoClass,
(PVOID)(ULONG_PTR)PsThreadInfoClass[InfoClass].AlignmentQUERY,
PsThreadInfoClass[InfoClass].RequiredSizeQUERY,
STATUS_ACCESS_VIOLATION);
/* The information length is wrong */
QuerySetThreadValidator(QUERY,
InfoClass,
(PVOID)(ULONG_PTR)PsThreadInfoClass[InfoClass].AlignmentQUERY,
PsThreadInfoClass[InfoClass].RequiredSizeQUERY - 1,
STATUS_INFO_LENGTH_MISMATCH);
}
}
START_TEST(NtQueryInformationThread)
{
Test_ThreadBasicInformationClass();
Test_ThreadQueryAlignmentProbe();
}

View file

@ -6,6 +6,7 @@
*/
#include "precomp.h"
#include <internal/ps_i.h>
static
void
@ -94,7 +95,40 @@ Test_ThreadPriorityClass(void)
HeapFree(GetProcessHeap(), 0, Priority);
}
static
void
Test_ThreadSetAlignmentProbe(void)
{
ULONG InfoClass;
/* Iterate over the process info classes and begin the tests */
for (InfoClass = 0; InfoClass < _countof(PsThreadInfoClass); InfoClass++)
{
/* The buffer is misaligned */
QuerySetThreadValidator(SET,
InfoClass,
(PVOID)(ULONG_PTR)1,
PsThreadInfoClass[InfoClass].RequiredSizeSET,
STATUS_DATATYPE_MISALIGNMENT);
/* We set an invalid buffer address */
QuerySetThreadValidator(SET,
InfoClass,
(PVOID)(ULONG_PTR)PsThreadInfoClass[InfoClass].AlignmentSET,
PsThreadInfoClass[InfoClass].RequiredSizeSET,
STATUS_ACCESS_VIOLATION);
/* The information length is wrong */
QuerySetThreadValidator(SET,
InfoClass,
(PVOID)(ULONG_PTR)PsThreadInfoClass[InfoClass].AlignmentSET,
PsThreadInfoClass[InfoClass].RequiredSizeSET - 1,
STATUS_INFO_LENGTH_MISMATCH);
}
}
START_TEST(NtSetInformationThread)
{
Test_ThreadPriorityClass();
Test_ThreadSetAlignmentProbe();
}