Hello Pierre, thanks for the hint! I'll replace ZeroMemory() in the next patch.
Regards, Eric Am 17.09.2018 um 22:15 schrieb Pierre Schweitzer: > Hi Eric, > > For security reason, when freeing your password buffers (see below), you > shouldn't be using ZeroMemory() before free, but SecureZeroMemory() to > zero the buffer. The first one can be optimized (and thus removed) by > the compiler. The second cannot. > > Cheers, > Pierre > > Le 17/09/2018 à 16:36, Eric Kohl a écrit : >> https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5e2c4657ca10dea1154cb43f16ee6962999ac7a4 >> >> commit 5e2c4657ca10dea1154cb43f16ee6962999ac7a4 >> Author: Eric Kohl <eric.k...@reactos.org> >> AuthorDate: Mon Sep 17 16:34:48 2018 +0200 >> Commit: Eric Kohl <eric.k...@reactos.org> >> CommitDate: Mon Sep 17 16:34:48 2018 +0200 >> >> [ADVAPI32][SERVICES] Add (dummy) password encryption/decryption >> functions to CreateServiceA/W and ChangeServiceConfigA/W in order to prepare >> to pass encrypted passwords to the service manager >> --- >> base/system/services/config.c | 24 ++++++++ >> base/system/services/rpcserver.c | 49 ++++++++++++++-- >> base/system/services/services.h | 7 +++ >> dll/win32/advapi32/service/scm.c | 123 >> ++++++++++++++++++++++++++++++++------- >> 4 files changed, 177 insertions(+), 26 deletions(-) >> >> diff --git a/base/system/services/rpcserver.c >> b/base/system/services/rpcserver.c >> index aa64233350..454181bb66 100644 >> --- a/base/system/services/rpcserver.c >> +++ b/base/system/services/rpcserver.c >> @@ -2216,12 +2232,23 @@ RChangeServiceConfigW( >> dwError = ERROR_SUCCESS; >> >> if (dwError != ERROR_SUCCESS) >> + { >> + DPRINT1("ScmSetServicePassword failed (Error %lu)\n", >> dwError); >> goto done; >> + } >> } >> } >> } >> >> done: >> + if (lpClearTextPassword != NULL) >> + { >> + /* Wipe and release the password buffer */ >> + ZeroMemory(lpClearTextPassword, >> + (wcslen(lpClearTextPassword) + 1) * sizeof(WCHAR)); >> + HeapFree(GetProcessHeap(), 0, lpClearTextPassword); >> + } >> + >> if (hServiceKey != NULL) >> RegCloseKey(hServiceKey); >> >> @@ -2612,6 +2645,14 @@ done: >> if (hServiceKey != NULL) >> RegCloseKey(hServiceKey); >> >> + if (lpClearTextPassword != NULL) >> + { >> + /* Wipe and release the password buffer */ >> + ZeroMemory(lpClearTextPassword, >> + (wcslen(lpClearTextPassword) + 1) * sizeof(WCHAR)); >> + HeapFree(GetProcessHeap(), 0, lpClearTextPassword); >> + } >> + >> if (dwError == ERROR_SUCCESS) >> { >> DPRINT("hService %p\n", hServiceHandle); > > > > _______________________________________________ > Ros-dev mailing list > Ros-dev@reactos.org > http://www.reactos.org/mailman/listinfo/ros-dev > _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev