From 46f3e8aa9d081d5ab7ea10881439e0074db5caf3 Mon Sep 17 00:00:00 2001 From: Arusekk Date: Fri, 12 Jun 2020 00:53:17 +0200 Subject: [PATCH] Unix backtrace call detection If the supposed return address is a pointer to the beginning of an executable page, and the page before is an oversized file mapping, like vvar before vdso, the backtrace would be terminated by SIGBUS. To avoid this, check not for readable, but for executable instead. --- src/archutils/Unix/Backtrace.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/archutils/Unix/Backtrace.cpp b/src/archutils/Unix/Backtrace.cpp index f55be5b130..fbf9a1c4d3 100644 --- a/src/archutils/Unix/Backtrace.cpp +++ b/src/archutils/Unix/Backtrace.cpp @@ -236,8 +236,7 @@ static bool PointsToValidCall( const void *ptr ) int len = 7; while( len ) { - int val = find_address( buf-len, g_ReadableBegin, g_ReadableEnd ); - if( val != -1 ) + if( IsExecutableAddress( buf - len ) ) break; --len; }