Author: cwittich
Date: Sun Jul 12 08:20:13 2015
New Revision: 68390
URL:
http://svn.reactos.org/svn/reactos?rev=68390&view=rev
Log:
[NTOSKRNL]
NtQuerySystemInformation: check for correct alignment
Modified:
trunk/reactos/ntoskrnl/ex/sysinfo.c
Modified: trunk/reactos/ntoskrnl/ex/sysinfo.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/sysinfo.c?rev=…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/sysinfo.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/sysinfo.c [iso-8859-1] Sun Jul 12 08:20:13 2015
@@ -2308,7 +2308,7 @@
{
NTSTATUS (* Query) (PVOID,ULONG,PULONG);
NTSTATUS (* Set) (PVOID,ULONG);
-
+ ULONG Alignment;
} QSSI_CALLS;
// QS Query & Set
@@ -2316,9 +2316,12 @@
// XS Set
// XX unknown behaviour
//
-#define SI_QS(n) {QSI_USE(n),SSI_USE(n)}
-#define SI_QX(n) {QSI_USE(n),NULL}
-#define SI_XS(n) {NULL,SSI_USE(n)}
+#define SI_QS(n) {QSI_USE(n),SSI_USE(n),TYPE_ALIGNMENT(ULONG)}
+#define SI_QX(n) {QSI_USE(n),NULL,TYPE_ALIGNMENT(ULONG)}
+#define SI_XS(n) {NULL,SSI_USE(n),TYPE_ALIGNMENT(ULONG)}
+#define SI_QS_ALIGN(n,a) {QSI_USE(n),SSI_USE(n),a}
+#define SI_QX_ALIGN(n,a) {QSI_USE(n),NULL,a}
+#define SI_XS_ALIGN(n,a) {NULL,SSI_USE(n),a}
#define SI_XX(n) {NULL,NULL}
static
@@ -2360,7 +2363,7 @@
SI_QX(SystemCrashDumpInformation),
SI_QX(SystemExceptionInformation),
SI_QX(SystemCrashDumpStateInformation),
- SI_QX(SystemKernelDebuggerInformation),
+ SI_QX_ALIGN(SystemKernelDebuggerInformation, TYPE_ALIGNMENT(BOOLEAN)),
SI_QX(SystemContextSwitchInformation),
SI_QS(SystemRegistryQuotaInformation),
SI_XS(SystemExtendServiceTableInformation),
@@ -2411,17 +2414,6 @@
_SEH2_TRY
{
- if (PreviousMode != KernelMode)
- {
- /* SystemKernelDebuggerInformation needs only BOOLEAN alignment */
- ProbeForWrite(SystemInformation, Length, 1);
- if (UnsafeResultLength != NULL)
- ProbeForWriteUlong(UnsafeResultLength);
- }
-
- if (UnsafeResultLength)
- *UnsafeResultLength = 0;
-
/*
* Check if the request is valid.
*/
@@ -2429,6 +2421,17 @@
{
_SEH2_YIELD(return STATUS_INVALID_INFO_CLASS);
}
+
+ if (PreviousMode != KernelMode)
+ {
+ /* SystemKernelDebuggerInformation needs only BOOLEAN alignment */
+ ProbeForWrite(SystemInformation, Length,
CallQS[SystemInformationClass].Alignment);
+ if (UnsafeResultLength != NULL)
+ ProbeForWriteUlong(UnsafeResultLength);
+ }
+
+ if (UnsafeResultLength)
+ *UnsafeResultLength = 0;
if (NULL != CallQS [SystemInformationClass].Query)
{