https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a279b1d2c6cd9a147dab7…
commit a279b1d2c6cd9a147dab71fa7e05d55ba7639ada
Author:     Nguyen Trung Khanh <nguyentrungkhanh97(a)gmail.com>
AuthorDate: Sat Jun 20 10:16:56 2020 +0700
Commit:     Thomas Faber <thomas.faber(a)reactos.org>
CommitDate: Wed Jun 24 09:15:27 2020 +0200
    [WIN32K:NTUSER] Zero allocated memory in IntCbAllocateMemory.
    This avoids disclosing pool contents to user mode when not all members
    of the respective structure are initialized or when there is padding.
    In co_IntCallWindowProc, also zero the stack buffer since this can
    be passed to user mode as well, and contains padding.
---
 win32ss/user/ntuser/callback.c | 15 ++-------------
 win32ss/user/rtl/text.c        |  1 -
 2 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/win32ss/user/ntuser/callback.c b/win32ss/user/ntuser/callback.c
index 7bcc65f5962..25e6eee5dd7 100644
--- a/win32ss/user/ntuser/callback.c
+++ b/win32ss/user/ntuser/callback.c
@@ -35,6 +35,7 @@ IntCbAllocateMemory(ULONG Size)
       return NULL;
    }
+   RtlZeroMemory(Mem, Size + sizeof(INT_CALLBACK_HEADER));
    W32Thread = PsGetCurrentThreadWin32Thread();
    ASSERT(W32Thread);
@@ -185,10 +186,6 @@ co_IntClientLoadLibrary(PUNICODE_STRING pstrLibName,
        pLibNameBuffer -= (ULONG_PTR)pArguments;
        pArguments->strLibraryName.Buffer = (PWCHAR)(pLibNameBuffer);
    }
-   else
-   {
-       RtlZeroMemory(&pArguments->strLibraryName, sizeof(UNICODE_STRING));
-   }
    if(pstrInitFunc)
    {
@@ -202,10 +199,6 @@ co_IntClientLoadLibrary(PUNICODE_STRING pstrLibName,
        pInitFuncBuffer -= (ULONG_PTR)pArguments;
        pArguments->strInitFuncName.Buffer = (PWCHAR)(pInitFuncBuffer);
    }
-   else
-   {
-       RtlZeroMemory(&pArguments->strInitFuncName, sizeof(UNICODE_STRING));
-   }
    /* Do the callback */
    UserLeaveCo();
@@ -294,7 +287,7 @@ co_IntCallWindowProc(WNDPROC Proc,
                      LPARAM lParam,
                      INT lParamBufferSize)
 {
-   WINDOWPROC_CALLBACK_ARGUMENTS StackArguments;
+   WINDOWPROC_CALLBACK_ARGUMENTS StackArguments = { 0 };
    PWINDOWPROC_CALLBACK_ARGUMENTS Arguments;
    NTSTATUS Status;
    PVOID ResultPointer, pActCtx;
@@ -662,7 +655,6 @@ co_IntCallHookProc(INT HookId,
    Common->offPfn = offPfn;
    Common->Ansi = Ansi;
    Common->lParamSize = lParamSize;
-   RtlZeroMemory(&Common->ModuleName, sizeof(Common->ModuleName));
    if (ModuleName->Buffer && ModuleName->Length)
    {
       RtlCopyMemory(&Common->ModuleName, ModuleName->Buffer,
ModuleName->Length);
@@ -929,9 +921,6 @@ co_IntCallLoadMenu( HINSTANCE hModule,
    }
    Common = (PLOADMENU_CALLBACK_ARGUMENTS) Argument;
-   // Help Intersource check and MenuName is now 4 bytes + so zero it.
-   RtlZeroMemory(Common, ArgumentLength);
-
    Common->hModule = hModule;
    if (pMenuName->Length)
       RtlCopyMemory(&Common->MenuName, pMenuName->Buffer,
pMenuName->Length);
diff --git a/win32ss/user/rtl/text.c b/win32ss/user/rtl/text.c
index 0ab3f00ea31..ac12626796b 100644
--- a/win32ss/user/rtl/text.c
+++ b/win32ss/user/rtl/text.c
@@ -997,7 +997,6 @@ BOOL UserExtTextOutW(HDC hdc,
     }
     else
     {
-        RtlZeroMemory(&Argument->rect, sizeof(RECT));
         Argument->bRect = FALSE;
     }