[SIGAR-98] fix sigar_proc_env_peb_get not to ReadProcessMemory beyond RegionSize
This commit is contained in:
parent
2423a9d47c
commit
24c3a239ee
|
@ -187,15 +187,24 @@ int sigar_proc_env_peb_get(sigar_t *sigar, HANDLE proc,
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
RTL_USER_PROCESS_PARAMETERS rtl;
|
RTL_USER_PROCESS_PARAMETERS rtl;
|
||||||
|
MEMORY_BASIC_INFORMATION info;
|
||||||
|
|
||||||
if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
|
if ((status = sigar_rtl_get(sigar, proc, &rtl)) != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buf, '\0', size);
|
memset(buf, '\0', size);
|
||||||
|
|
||||||
/* -2 to ensure \0\0 terminator */
|
/* -2 to ensure \0\0 terminator */
|
||||||
if (ReadProcessMemory(proc, rtl.Environment, buf, size-2, NULL)) {
|
size -= 2;
|
||||||
|
|
||||||
|
if (VirtualQueryEx(proc, rtl.Environment, &info, sizeof(info))) {
|
||||||
|
if (size > info.RegionSize) {
|
||||||
|
/* ReadProcessMemory beyond region would fail */
|
||||||
|
size = info.RegionSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ReadProcessMemory(proc, rtl.Environment, buf, size, NULL)) {
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in New Issue