New issue
Advanced search Search tips

Issue 748414 link

Starred by 3 users

Issue metadata

Status: Assigned
Owner:
Cc:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Bug-Regression



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
 
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.
Owner: tedc...@chromium.org
Status: Assigned (was: Unconfirmed)
Cc: tedc...@chromium.org
Owner: primiano@chromium.org
Cc: mark@chromium.org blaz...@yandex-team.ru torne@chromium.org rsesek@chromium.org
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