diff options
author | Tobias Sargeant <tobiasjs@google.com> | 2017-01-31 13:42:52 +0000 |
---|---|---|
committer | Tobias Sargeant <tobiasjs@chromium.org> | 2017-01-31 14:13:48 +0000 |
commit | 7c2799f3ba6f8a8186c8883b213c3e59768b1287 (patch) | |
tree | ee80449b56b37400892627baf1414871e2db6948 /src/client/linux/microdump_writer/microdump_writer.cc | |
parent | Fixed a bug where cv record size was not correctly checked. (diff) | |
download | breakpad-7c2799f3ba6f8a8186c8883b213c3e59768b1287.tar.xz |
Sanitize dumped stacks to remove data that may be identifiable.
In order to sanitize the stack contents we erase any pointer-aligned
word that could not be interpreted as a pointer into one of the
processes' memory mappings, or a small integer (+/-4096).
This still retains enough information to unwind stack frames, and also
to recover some register values.
BUG=682278
Change-Id: I541a13b2e92a9d1aea2c06a50bd769a9e25601d3
Reviewed-on: https://chromium-review.googlesource.com/430050
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Diffstat (limited to 'src/client/linux/microdump_writer/microdump_writer.cc')
-rw-r--r-- | src/client/linux/microdump_writer/microdump_writer.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc index 8109a981..341d7f5c 100644 --- a/src/client/linux/microdump_writer/microdump_writer.cc +++ b/src/client/linux/microdump_writer/microdump_writer.cc @@ -134,6 +134,7 @@ class MicrodumpWriter { const MappingList& mappings, bool skip_dump_if_principal_mapping_not_referenced, uintptr_t address_within_principal_mapping, + bool sanitize_stack, const MicrodumpExtraInfo& microdump_extra_info, LinuxDumper* dumper) : ucontext_(context ? &context->context : NULL), @@ -145,6 +146,7 @@ class MicrodumpWriter { skip_dump_if_principal_mapping_not_referenced_( skip_dump_if_principal_mapping_not_referenced), address_within_principal_mapping_(address_within_principal_mapping), + sanitize_stack_(sanitize_stack), microdump_extra_info_(microdump_extra_info), log_line_(NULL), stack_copy_(NULL), @@ -368,6 +370,11 @@ class MicrodumpWriter { } void DumpThreadStack() { + if (sanitize_stack_) { + dumper_->SanitizeStackCopy(stack_copy_, stack_len_, stack_pointer_, + stack_pointer_ - stack_lower_bound_); + } + LogAppend("S 0 "); LogAppend(stack_pointer_); LogAppend(" "); @@ -580,6 +587,7 @@ class MicrodumpWriter { const MappingList& mapping_list_; bool skip_dump_if_principal_mapping_not_referenced_; uintptr_t address_within_principal_mapping_; + bool sanitize_stack_; const MicrodumpExtraInfo microdump_extra_info_; char* log_line_; @@ -607,6 +615,7 @@ bool WriteMicrodump(pid_t crashing_process, const MappingList& mappings, bool skip_dump_if_principal_mapping_not_referenced, uintptr_t address_within_principal_mapping, + bool sanitize_stack, const MicrodumpExtraInfo& microdump_extra_info) { LinuxPtraceDumper dumper(crashing_process); const ExceptionHandler::CrashContext* context = NULL; @@ -619,9 +628,10 @@ bool WriteMicrodump(pid_t crashing_process, dumper.set_crash_signal(context->siginfo.si_signo); dumper.set_crash_thread(context->tid); } - MicrodumpWriter writer( - context, mappings, skip_dump_if_principal_mapping_not_referenced, - address_within_principal_mapping, microdump_extra_info, &dumper); + MicrodumpWriter writer(context, mappings, + skip_dump_if_principal_mapping_not_referenced, + address_within_principal_mapping, sanitize_stack, + microdump_extra_info, &dumper); if (!writer.Init()) return false; writer.Dump(); |