Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7aad2567 authored by Christopher Ferris's avatar Christopher Ferris
Browse files

Disable scudo when using svelte config.

This code was added, but a svelte config still tries to use scudo
related code that doesn't exist.

Bug: 201007100

Test: Ran unit tests on normal config.
Test: Ran unit tests on svelte config.
Change-Id: Ic84bae37717d213121aef182bac2f82dbee25213
parent e0e160c5
Loading
Loading
Loading
Loading
+7 −9
Original line number Original line Diff line number Diff line
@@ -180,7 +180,6 @@ cc_library_static {
        "libdebuggerd/backtrace.cpp",
        "libdebuggerd/backtrace.cpp",
        "libdebuggerd/gwp_asan.cpp",
        "libdebuggerd/gwp_asan.cpp",
        "libdebuggerd/open_files_list.cpp",
        "libdebuggerd/open_files_list.cpp",
        "libdebuggerd/scudo.cpp",
        "libdebuggerd/tombstone.cpp",
        "libdebuggerd/tombstone.cpp",
        "libdebuggerd/tombstone_proto.cpp",
        "libdebuggerd/tombstone_proto.cpp",
        "libdebuggerd/tombstone_proto_to_text.cpp",
        "libdebuggerd/tombstone_proto_to_text.cpp",
@@ -193,9 +192,6 @@ cc_library_static {
    include_dirs: [
    include_dirs: [
        // Needed for private/bionic_fdsan.h
        // Needed for private/bionic_fdsan.h
        "bionic/libc",
        "bionic/libc",

        // Needed for scudo/interface.h
        "external/scudo/standalone/include",
    ],
    ],
    header_libs: [
    header_libs: [
        "bionic_libc_platform_headers",
        "bionic_libc_platform_headers",
@@ -217,7 +213,6 @@ cc_library_static {
    whole_static_libs: [
    whole_static_libs: [
        "libasync_safe",
        "libasync_safe",
        "gwp_asan_crash_handler",
        "gwp_asan_crash_handler",
        "libscudo",
        "libtombstone_proto",
        "libtombstone_proto",
        "libprocinfo",
        "libprocinfo",
        "libprotobuf-cpp-lite",
        "libprotobuf-cpp-lite",
@@ -246,6 +241,13 @@ cc_library_static {
        debuggable: {
        debuggable: {
            cflags: ["-DROOT_POSSIBLE"],
            cflags: ["-DROOT_POSSIBLE"],
        },
        },

        malloc_not_svelte: {
            cflags: ["-DUSE_SCUDO"],
            whole_static_libs: ["libscudo"],
            srcs: ["libdebuggerd/scudo.cpp"],
            header_libs: ["scudo_headers"],
        },
    },
    },
}
}


@@ -316,10 +318,6 @@ cc_test {
        "gwp_asan_headers",
        "gwp_asan_headers",
    ],
    ],


    include_dirs: [
        "external/scudo/standalone/include",
    ],

    local_include_dirs: [
    local_include_dirs: [
        "libdebuggerd",
        "libdebuggerd",
    ],
    ],
+32 −23
Original line number Original line Diff line number Diff line
@@ -57,10 +57,13 @@
#include "libdebuggerd/backtrace.h"
#include "libdebuggerd/backtrace.h"
#include "libdebuggerd/gwp_asan.h"
#include "libdebuggerd/gwp_asan.h"
#include "libdebuggerd/open_files_list.h"
#include "libdebuggerd/open_files_list.h"
#include "libdebuggerd/scudo.h"
#include "libdebuggerd/utility.h"
#include "libdebuggerd/utility.h"
#include "util.h"
#include "util.h"


#if defined(USE_SCUDO)
#include "libdebuggerd/scudo.h"
#endif

#include "gwp_asan/common.h"
#include "gwp_asan/common.h"
#include "gwp_asan/crash_handler.h"
#include "gwp_asan/crash_handler.h"


@@ -115,8 +118,26 @@ static std::string get_stack_overflow_cause(uint64_t fault_addr, uint64_t sp,
  return "";
  return "";
}
}


static void dump_probable_cause(log_t* log, const siginfo_t* si, unwindstack::Maps* maps,
static void dump_probable_cause(log_t* log, unwindstack::Unwinder* unwinder,
                                unwindstack::Regs* regs) {
                                const ProcessInfo& process_info, const ThreadInfo& main_thread) {
#if defined(USE_SCUDO)
  ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info);
  if (scudo_crash_data.CrashIsMine()) {
    scudo_crash_data.DumpCause(log, unwinder);
    return;
  }
#endif

  GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info,
                                       main_thread);
  if (gwp_asan_crash_data.CrashIsMine()) {
    gwp_asan_crash_data.DumpCause(log);
    return;
  }

  unwindstack::Maps* maps = unwinder->GetMaps();
  unwindstack::Regs* regs = main_thread.registers.get();
  const siginfo_t* si = main_thread.siginfo;
  std::string cause;
  std::string cause;
  if (si->si_signo == SIGSEGV && si->si_code == SEGV_MAPERR) {
  if (si->si_signo == SIGSEGV && si->si_code == SEGV_MAPERR) {
    if (si->si_addr < reinterpret_cast<void*>(4096)) {
    if (si->si_addr < reinterpret_cast<void*>(4096)) {
@@ -395,22 +416,9 @@ static bool dump_thread(log_t* log, unwindstack::Unwinder* unwinder, const Threa
    dump_signal_info(log, thread_info, process_info, unwinder->GetProcessMemory().get());
    dump_signal_info(log, thread_info, process_info, unwinder->GetProcessMemory().get());
  }
  }


  std::unique_ptr<GwpAsanCrashData> gwp_asan_crash_data;
  std::unique_ptr<ScudoCrashData> scudo_crash_data;
  if (primary_thread) {
  if (primary_thread) {
    gwp_asan_crash_data = std::make_unique<GwpAsanCrashData>(unwinder->GetProcessMemory().get(),
    dump_probable_cause(log, unwinder, process_info, thread_info);
                                                             process_info, thread_info);
    scudo_crash_data =
        std::make_unique<ScudoCrashData>(unwinder->GetProcessMemory().get(), process_info);
  }


  if (primary_thread && gwp_asan_crash_data->CrashIsMine()) {
    gwp_asan_crash_data->DumpCause(log);
  } else if (thread_info.siginfo && !(primary_thread && scudo_crash_data->CrashIsMine())) {
    dump_probable_cause(log, thread_info.siginfo, unwinder->GetMaps(), thread_info.registers.get());
  }

  if (primary_thread) {
    dump_abort_message(log, unwinder->GetProcessMemory().get(), process_info.abort_msg_address);
    dump_abort_message(log, unwinder->GetProcessMemory().get(), process_info.abort_msg_address);
  }
  }


@@ -432,15 +440,16 @@ static bool dump_thread(log_t* log, unwindstack::Unwinder* unwinder, const Threa
  }
  }


  if (primary_thread) {
  if (primary_thread) {
    if (gwp_asan_crash_data->HasDeallocationTrace()) {
    GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info,
      gwp_asan_crash_data->DumpDeallocationTrace(log, unwinder);
                                         thread_info);
    }


    if (gwp_asan_crash_data->HasAllocationTrace()) {
    if (gwp_asan_crash_data.HasDeallocationTrace()) {
      gwp_asan_crash_data->DumpAllocationTrace(log, unwinder);
      gwp_asan_crash_data.DumpDeallocationTrace(log, unwinder);
    }
    }


    scudo_crash_data->DumpCause(log, unwinder);
    if (gwp_asan_crash_data.HasAllocationTrace()) {
      gwp_asan_crash_data.DumpAllocationTrace(log, unwinder);
    }


    unwindstack::Maps* maps = unwinder->GetMaps();
    unwindstack::Maps* maps = unwinder->GetMaps();
    dump_memory_and_code(log, maps, unwinder->GetProcessMemory().get(),
    dump_memory_and_code(log, maps, unwinder->GetProcessMemory().get(),
+4 −0
Original line number Original line Diff line number Diff line
@@ -18,7 +18,9 @@


#include "libdebuggerd/tombstone.h"
#include "libdebuggerd/tombstone.h"
#include "libdebuggerd/gwp_asan.h"
#include "libdebuggerd/gwp_asan.h"
#if defined(USE_SCUDO)
#include "libdebuggerd/scudo.h"
#include "libdebuggerd/scudo.h"
#endif


#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <fcntl.h>
@@ -185,11 +187,13 @@ void set_human_readable_cause(Cause* cause, uint64_t fault_addr) {


static void dump_probable_cause(Tombstone* tombstone, unwindstack::Unwinder* unwinder,
static void dump_probable_cause(Tombstone* tombstone, unwindstack::Unwinder* unwinder,
                                const ProcessInfo& process_info, const ThreadInfo& main_thread) {
                                const ProcessInfo& process_info, const ThreadInfo& main_thread) {
#if defined(USE_SCUDO)
  ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info);
  ScudoCrashData scudo_crash_data(unwinder->GetProcessMemory().get(), process_info);
  if (scudo_crash_data.CrashIsMine()) {
  if (scudo_crash_data.CrashIsMine()) {
    scudo_crash_data.AddCauseProtos(tombstone, unwinder);
    scudo_crash_data.AddCauseProtos(tombstone, unwinder);
    return;
    return;
  }
  }
#endif


  GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info,
  GwpAsanCrashData gwp_asan_crash_data(unwinder->GetProcessMemory().get(), process_info,
                                       main_thread);
                                       main_thread);