mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Make stack bounds detection work with ASAN
Where a local variable is used as part of the stack bounds detection, it has to actually be on the stack. ASAN can put local variable on "fake stacks", however, with addresses in different memory mappings. This completely destroys the stack bounds calculation, and can lead to e.g. things not getting GC marked on the machine stack or stackoverflow checks that always fail. The __asan_addr_is_in_fake_stack helper can be used to get the _real_ stack address of such variables, and thus perform the stack size calculation properly [Bug #20001]
This commit is contained in:
parent
4ba8f0dc99
commit
6185cfdf38
3 changed files with 33 additions and 6 deletions
|
@ -11,6 +11,7 @@
|
|||
|
||||
#ifdef THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION
|
||||
|
||||
#include "internal/sanitizers.h"
|
||||
#include <process.h>
|
||||
|
||||
#define TIME_QUANTUM_USEC (10 * 1000)
|
||||
|
@ -596,7 +597,7 @@ COMPILER_WARNING_IGNORED(-Wmaybe-uninitialized)
|
|||
static inline SIZE_T
|
||||
query_memory_basic_info(PMEMORY_BASIC_INFORMATION mi, void *local_in_parent_frame)
|
||||
{
|
||||
return VirtualQuery(local_in_parent_frame, mi, sizeof(*mi));
|
||||
return VirtualQuery(asan_get_real_stack_addr(local_in_parent_frame), mi, sizeof(*mi));
|
||||
}
|
||||
COMPILER_WARNING_POP
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue