Issue metadata
Sign in to add a comment
|
Breakpad can't handle crashes caused by CHECK on some devices on Release builds after f53167270c
Reported by
blaz...@yandex-team.ru,
Jul 25 2017
|
||||||||||||||||||
Issue description
Steps to reproduce the problem:
1. Make browser crash on a CHECK.
2. Read app's log, there should be lines similar to:
W/google-breakpad(13652): Failed to generate minidump.
W/google-breakpad(13652): Microdump crash handler failed.
What is the expected behavior?
Breakpad is expected to generate minidump/microdump.
What went wrong?
Breakpad fails because linux_dumper.cc fails to open /proc/pid/auxv.
Line:
sys_open(auxv_path, O_RDONLY, 0)
fails with 'Permission denied' error (message read from strerror).
Did this work before? Yes Parent commit of f53167270c.
Chrome version: 58.0.3029.7 Channel: canary
OS Version: 5.0.2
Flash Version: -
The problem reproduces only on a handful of devices with specific OS versions.
For an example, it didn't reproduce on 'Samsung Galaxy Tab S SM-T800' until its OS version was reverted to 5.0.2.
The problem can be fixed locally by partial rollback of f53167270c in base/logging.h:
https://pastebin.com/p1K9Vjm7
Next issues could be caused by this problem:
https://bugs.chromium.org/p/chromium/issues/detail?id=688252
https://bugs.chromium.org/p/chromium/issues/detail?id=701162
,
Jul 27 2017
,
Jul 27 2017
,
Sep 5 2017
Thanks for the report, a bunch of things are not clear to me:
1. It seems that we always try to read "auxv", as that is in
bool LinuxDumper::Init() {
return ReadAuxv() & ... other stuff
}
so not clear how is the change in logging.h making that any different.
2. Looks like the fact that we cannot read auxv is sort of known.
Somewhere else in minidump_writer.cc I see:
// Parse /proc/cpuinfo to reconstruct the CPUID value, as well
// as the ELF hwcaps field. For the latter, it would be easier to
// read /proc/self/auxv but unfortunately, this file is not always
// readable from regular Android applications on later versions
// (>= 4.1) of the Android platform.
So the problem here is actually the fact that reading auxv shouldn't be fatal.
I am quite against changing logging.h because that has very complex implication on the crash reports and every time we touched something in those macros, something else broke along the way.
It seems that the thing that needs to be fixed is not relying on the ability of reading auxv.
> Removed the 'bkpt' instruction in file 'base/logging.h' from line:
> asm volatile("bkpt #0; udf %0;" ::"i"(__COUNTER__ % 256))
> and Breakpad started reading /proc/pid/auxv without problems.
Ah, so looks like our ability to read auxv depeds on which specific instruction we ran before crashing?
That sounds a kernel bug to me. But even if that's the case we should fix this in breakpad not in chrome's base.
+mark/rsesek/torne
|
|||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||
Comment 1 by blaz...@yandex-team.ru
, Jul 26 2017Removed the 'bkpt' instruction in file 'base/logging.h' from line: asm volatile("bkpt #0; udf %0;" ::"i"(__COUNTER__ % 256)) and Breakpad started reading /proc/pid/auxv without problems.