mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 04:28:13 +00:00
UserspaceEmulator: Don't audit accesses within realloc(), malloc_size()
These functions access malloc-related memory outside of UE's accounting boundaries, so just ignore them.
This commit is contained in:
parent
6d841f2628
commit
013c7ccd73
2 changed files with 14 additions and 1 deletions
|
@ -153,11 +153,17 @@ bool Emulator::load_elf()
|
||||||
|
|
||||||
auto malloc_symbol = m_elf->find_demangled_function("malloc");
|
auto malloc_symbol = m_elf->find_demangled_function("malloc");
|
||||||
auto free_symbol = m_elf->find_demangled_function("free");
|
auto free_symbol = m_elf->find_demangled_function("free");
|
||||||
|
auto realloc_symbol = m_elf->find_demangled_function("realloc");
|
||||||
|
auto malloc_size_symbol = m_elf->find_demangled_function("malloc_size");
|
||||||
|
|
||||||
m_malloc_symbol_start = malloc_symbol.value().value();
|
m_malloc_symbol_start = malloc_symbol.value().value();
|
||||||
m_malloc_symbol_end = m_malloc_symbol_start + malloc_symbol.value().size();
|
m_malloc_symbol_end = m_malloc_symbol_start + malloc_symbol.value().size();
|
||||||
m_free_symbol_start = free_symbol.value().value();
|
m_free_symbol_start = free_symbol.value().value();
|
||||||
m_free_symbol_end = m_free_symbol_start + free_symbol.value().size();
|
m_free_symbol_end = m_free_symbol_start + free_symbol.value().size();
|
||||||
|
m_realloc_symbol_start = realloc_symbol.value().value();
|
||||||
|
m_realloc_symbol_end = m_realloc_symbol_start + realloc_symbol.value().size();
|
||||||
|
m_malloc_size_symbol_start = malloc_size_symbol.value().value();
|
||||||
|
m_malloc_size_symbol_end = m_malloc_size_symbol_start + malloc_size_symbol.value().size();
|
||||||
|
|
||||||
m_debug_info = make<Debug::DebugInfo>(m_elf);
|
m_debug_info = make<Debug::DebugInfo>(m_elf);
|
||||||
return true;
|
return true;
|
||||||
|
@ -194,7 +200,10 @@ int Emulator::exec()
|
||||||
|
|
||||||
bool Emulator::is_in_malloc_or_free() const
|
bool Emulator::is_in_malloc_or_free() const
|
||||||
{
|
{
|
||||||
return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end) || (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end);
|
return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end)
|
||||||
|
|| (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end)
|
||||||
|
|| (m_cpu.base_eip() >= m_realloc_symbol_start && m_cpu.base_eip() < m_realloc_symbol_end)
|
||||||
|
|| (m_cpu.base_eip() >= m_malloc_size_symbol_start && m_cpu.base_eip() < m_malloc_size_symbol_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<FlatPtr> Emulator::raw_backtrace()
|
Vector<FlatPtr> Emulator::raw_backtrace()
|
||||||
|
|
|
@ -164,8 +164,12 @@ private:
|
||||||
|
|
||||||
FlatPtr m_malloc_symbol_start { 0 };
|
FlatPtr m_malloc_symbol_start { 0 };
|
||||||
FlatPtr m_malloc_symbol_end { 0 };
|
FlatPtr m_malloc_symbol_end { 0 };
|
||||||
|
FlatPtr m_realloc_symbol_start { 0 };
|
||||||
|
FlatPtr m_realloc_symbol_end { 0 };
|
||||||
FlatPtr m_free_symbol_start { 0 };
|
FlatPtr m_free_symbol_start { 0 };
|
||||||
FlatPtr m_free_symbol_end { 0 };
|
FlatPtr m_free_symbol_end { 0 };
|
||||||
|
FlatPtr m_malloc_size_symbol_start { 0 };
|
||||||
|
FlatPtr m_malloc_size_symbol_end { 0 };
|
||||||
|
|
||||||
sigset_t m_pending_signals { 0 };
|
sigset_t m_pending_signals { 0 };
|
||||||
sigset_t m_signal_mask { 0 };
|
sigset_t m_signal_mask { 0 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue