hookSystem: avoid using manual mem management, fix leak

fixes #10790
This commit is contained in:
Vaxry 2025-06-19 11:58:07 +02:00
parent 9fb6b5d96b
commit e999ad664d
No known key found for this signature in database
GPG key ID: 665806380871D640
2 changed files with 13 additions and 14 deletions

View file

@ -182,8 +182,8 @@ bool CFunctionHook::hook() {
return false;
}
m_originalBytes = malloc(ORIGSIZE);
memcpy(m_originalBytes, m_source, ORIGSIZE);
m_originalBytes.resize(ORIGSIZE);
memcpy(m_originalBytes.data(), m_source, ORIGSIZE);
// populate trampoline
memcpy(m_trampolineAddr, PROBEFIXEDASM.bytes.data(), HOOKSIZE); // first, original but fixed func bytes
@ -235,7 +235,7 @@ bool CFunctionHook::unhook() {
mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE | PROT_EXEC);
// write back original bytes
memcpy(m_source, m_originalBytes, m_hookLen);
memcpy(m_source, m_originalBytes.data(), m_hookLen);
// revert mprot
mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_EXEC);
@ -245,9 +245,7 @@ bool CFunctionHook::unhook() {
m_hookLen = 0;
m_trampoLen = 0;
m_trampolineAddr = nullptr; // no unmapping, it's managed by the HookSystem
m_originalBytes = nullptr;
free(m_originalBytes);
m_originalBytes.clear();
return true;
}