summaryrefslogtreecommitdiffstats
path: root/chrome/app/breakpad_linux.cc
Commit message (Collapse)AuthorAgeFilesLines
* Split the IPC code into ipc/agl@chromium.org2009-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This splits the ipc code from the common project. The 'common' project pulls in all of webkit, the v8 bindings, skia, googleurl, and a number of other projects which makes it very difficult to deal with especially for external projects wanting just to use some of Chromium's infrastructure. This puts the ipc code into its top-level ipc/ directory with a dependency only on base. The common project depends on the new ipc/ipc.gyp:ipc target so that all projects currently pulling common in to get the IPC code still have it available. This mostly follows agl's pre-gyp attempt to do this which was r13062. Known issues: - Currently a number of projects depend on chrome/chrome.gyp:common in order to use the IPC infrastructure. Rather than fixing all of these dependencies I have made common depend on ipc/ipc.gyp:ipc and added "ipc" to the include_rules section of DEPS so that checkdeps.py doesn't complain. Over time projects that need IPC should depend on the IPC project themselves and dependencies on common removed, although I don't think many projects that need IPC will be able to get away without common currently. - ipc/ipc_message_macros.h still has #include "chrome/common/..." inside of a ipc/ should not refer to files in chrome/... now. I'm not sure how to resolve this since it's really an IDE bug - the named pipe name (windows+linux) and the logging event name (all) + env variable (posix) refer explicitly to 'Chrome' which somewhat hurts the illusion of ipc/ being an independent library. I think this should be examined in a subsequent, much smaller patch. - I've eliminated the IPC.SendMsgCount counter since it was implemented in a way to create a dependency from ipc/ to chrome/common/chrome_counters. This is the same approach that r13062 took. http://codereview.chromium.org/155905 (Patch from James Robinson) git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21342 0039d316-1c4b-4281-b951-d872f2087c98
* Include output of "lsb_release -d" in crash reports.thestig@chromium.org2009-07-171-23/+83
| | | | | | | | | /etc/lsb-release does not exist on all distros, and sometimes it does not provide any useful info. Whereas all LSB complaint distros return useful data with the lsb_release command. Review URL: http://codereview.chromium.org/155653 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20936 0039d316-1c4b-4281-b951-d872f2087c98
* Pass Linux crash guid to renderers.thestig@chromium.org2009-07-161-0/+3
| | | | | | Review URL: http://codereview.chromium.org/149736 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20843 0039d316-1c4b-4281-b951-d872f2087c98
* Make Linux crash death signal message constant sized.thestig@chromium.org2009-07-151-4/+15
| | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/149709 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20803 0039d316-1c4b-4281-b951-d872f2087c98
* Revert r20553.thestig@chromium.org2009-07-131-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20554 0039d316-1c4b-4281-b951-d872f2087c98
* Additional svn ignores for native_client and Makefile.thestig@chromium.org2009-07-131-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20553 0039d316-1c4b-4281-b951-d872f2087c98
* Attempt to fix the official Google Chrome build on Linux.jam@chromium.org2009-07-091-4/+4
| | | | | | Review URL: http://codereview.chromium.org/155261 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20227 0039d316-1c4b-4281-b951-d872f2087c98
* Linux: SUID sandbox supportagl@chromium.org2009-07-081-18/+10
| | | | | | | | | | | | | | | | | | | | | * Make processes dumpable when they crash. * Find crashing processes by searching for a socket inode, rather than relying on SCM_CREDENTIALS. The kernel doesn't translate PIDs between PID namespaces with SCM_CREDENTIALS, so we can't use the PID there. * Use a command line flag to the renderer to enable crash dumping. Previously it tried to access the user's home directory for this information. * Search for a sandbox helper binary and, if found, use it. * Include the source for a sandbox helper binary. It's currently not built by default. http://codereview.chromium.org/149230 R=evan,markus BUG=8081 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20110 0039d316-1c4b-4281-b951-d872f2087c98
* Report the process type in Linux crash reports.thestig@chromium.org2009-06-231-1/+28
| | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/147031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19036 0039d316-1c4b-4281-b951-d872f2087c98
* Linux: fix crash reporting for zygote modelagl@chromium.org2009-06-231-2/+4
| | | | | | | | | | | | | | | | | | Crash reporting broke on Linux when we enabled the zygote model a couple of weeks ago. We can't just add "zygote" to the check for the process type because the crash signal fd is set at the same time and that will change when a renderer is forked from the zygote. This fixes it for now, but it will need to be redone when we enable sandboxing. http://codereview.chromium.org/147004 BUG=14969 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19035 0039d316-1c4b-4281-b951-d872f2087c98
* Add headers missing in r18291.thestig@chromium.org2009-06-121-0/+1
| | | | | | Review URL: http://codereview.chromium.org/125072 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18311 0039d316-1c4b-4281-b951-d872f2087c98
* Linux: refactor zygote supportagl@chromium.org2009-06-121-5/+3
| | | | | | | | | | | | | | | | | | | http://code.google.com/p/chromium/wiki/LinuxZygote * Move Chrome specific bits out of base * Move away from the idea of reserved file descriptors (which don't really work with zygotes) * Load resources before forking renderers (means that we don't need communication between the zygote process and the renderers) * Make sure that gdb works against the browser again * Make sure that we have different ASLR between the renderers and the browser. http://codereview.chromium.org/119335 (This is a reland. First landed in r18109, reverted in r18112.) git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18291 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 18109, 18111: Windows UI tests failed.agl@chromium.org2009-06-101-3/+5
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18112 0039d316-1c4b-4281-b951-d872f2087c98
* Linux: refactor zygote supportagl@chromium.org2009-06-101-5/+3
| | | | | | | | | | | | | | | | | | http://code.google.com/p/chromium/wiki/LinuxZygote * Move Chrome specific bits out of base * Move away from the idea of reserved file descriptors (which don't really work with zygotes) * Load resources before forking renderers (means that we don't need communication between the zygote process and the renderers) * Make sure that gdb works against the browser again * Make sure that we have different ASLR between the renderers and the browser. http://codereview.chromium.org/119335 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18109 0039d316-1c4b-4281-b951-d872f2087c98
* Prototype implementation of zygotes. dkegel@google.com2009-06-061-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Limitations that need addressing still: - Doesn't forcibly terminate children that should have exited but haven't Enable with env var ENABLE_ZYGOTE_MANAGER=1. BUG=11841 TEST= start the browser, then make chrome and all .pak files unreadable; or alternately, start an installed browser, and uninstall the browser while it's running. Then create a new tab and browse to two new sites. Here's an example script to hide and unhide the .pak files (note: do not move the directory they're in, that doesn't work): #!/bin/sh chmod_all() { chmod $1 sconsbuild/Debug/chrome for path in . locales obj/chrome/app/intermediate/repack obj/global_intermediate/* themes do chmod $1 sconsbuild/Debug/$path/*.pak done } case $1 in hide) chmod_all 000 ;; show) chmod_all 755 ;; esac Review URL: http://codereview.chromium.org/115773 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17840 0039d316-1c4b-4281-b951-d872f2087c98
* Generate GUIDs for users who wish to upload crash reports. Include it in ↵thestig@google.com2009-06-021-10/+48
| | | | | | | | | | crash reports. BUG=none TEST=none Review URL: http://codereview.chromium.org/118096 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17372 0039d316-1c4b-4281-b951-d872f2087c98
* A bit more clean up for Linux upload crash dump.thestig@chromium.org2009-05-291-7/+9
| | | | | | | | BUG=none TEST=visit about:crash, no dump file left over in /tmp. Review URL: http://codereview.chromium.org/113984 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17161 0039d316-1c4b-4281-b951-d872f2087c98
* Limit Breakpad Linux to 8 url-chunk entries.thestig@chromium.org2009-05-281-0/+3
| | | | | | Review URL: http://codereview.chromium.org/115876 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17111 0039d316-1c4b-4281-b951-d872f2087c98
* Respect Linux user prefs with regards to crash reporting.thestig@chromium.org2009-05-281-3/+94
| | | | | | | | | | This involves implementing GoogleUpdateSettings::[GS]etCollectStatsConsent, and a whole lot of refactoring. BUG=none TEST=delete config dir, run official Linux build, don't enable crash reporting, crash browser -> no crash reporting. Review URL: http://codereview.chromium.org/115808 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17104 0039d316-1c4b-4281-b951-d872f2087c98
* Set the buffer size correctly for 8-byte crash ids.thestig@chromium.org2009-05-261-2/+2
| | | | | | | | BUG=none TEST=crash handler should not print garbage to the console following the crash id. Review URL: http://codereview.chromium.org/115796 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16917 0039d316-1c4b-4281-b951-d872f2087c98
* Linux: add Breakpad supportagl@chromium.org2009-05-221-0/+392
This commits a rewrite of the Breakpad Linux client. The old code: * Had a number of plain bugs in it, but those could just have been fixed. * Allocated memory from the heap, which is a no go. * Made libc calls which can enter the dynamic linker - another source of crashes. * Didn't understand some of the tricks needed, like clone() via libc will write to random areas of memory because it assumes that it's only called from libpthread Additionally, we had one more requirement which meant changing the interface: * We need to be able to crash dump the renderers from the browser process. And that last one really needed a rewrite. We intend to try and upstream this new code into Breakpad. The new Breakpad design works like this: When a renderer crashes, a signal handler runs on an alternative stack and collects information about the registers of the thread before the crash. Then we enter Chromium specific code an send a datagram message to a magic file descriptor (4) containing: * the registers and tid of the crashing thread * the active URL * a file descriptor to a socket * a CREDENTIALS structure giving the PID of the renderer. On the other end of the socket is an object on the IO thread (render_crash_handler_host_linux.cc) which reads and parses the datagram. The CREDENTIALS structure is validated by the kernel, so the renderer can't lie about it's PID and try and get the browser to crash dump the wrong process. The browser then ptraces the renderer and extracts all the needed information to write a minidump to a temp file. Then we write a byte to the file descriptor which the renderer gave the browser in the datagram and that's the signal to the renderer to finish dying. It dies by sending itself the same signal which trigger the crash dump in the first place, so it will appear to crash as normal as far as kernel core dumps and waitpid are concerned. The browser then constucts a MIME message in a temp file for upload to the crash service. We then fork out to /usr/bin/wget to actually do the upload (since Debian numbers suggest that 99.8% of users have wget installed.) A second forked child unlinks the temp files once wget has completed. For a browser crash, everything works pretty much the same except that the datagram step is omitted and we clone() off a process to ptrace ourselves and write the minidump. This code is only enabled in Chrome branded builds. Stub source files are substituted in the case of a Chromium build. http://codereview.chromium.org/115526 BUG=9646,10772 TEST=Build a Chrome branded binary. Send SEGV to a renderer and verify that wget output appears on stderr. Send a SEGV to the main binary and verify the same. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16719 0039d316-1c4b-4281-b951-d872f2087c98