summaryrefslogtreecommitdiff
path: root/src/plugins/HookSystem.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-06-19 11:58:07 +0200
committerVaxry <vaxry@vaxry.net>2025-06-19 11:58:12 +0200
commite999ad664da97d066e30e1d2749061eb57b0e19a (patch)
tree03af1e211727d173125982a8ef7803d7b8a327f2 /src/plugins/HookSystem.cpp
parent9fb6b5d96bfd242990b1bf08bd42d24bed8fb4bc (diff)
hookSystem: avoid using manual mem management, fix leak
fixes #10790
Diffstat (limited to 'src/plugins/HookSystem.cpp')
-rw-r--r--src/plugins/HookSystem.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp
index f39eb145..906c1985 100644
--- a/src/plugins/HookSystem.cpp
+++ b/src/plugins/HookSystem.cpp
@@ -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;
}