mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 20:18:12 +00:00
CrashReporter: Don't crash when investigating a HackStudio crash
Previously when opening a crash report for HackStudio, the `unveil("/bin/HackStudio", "rx")` call was failing because of the earlier `unveil(executable_path.characters(), "r")` call requesting only "r" permissions for it. This patch handles this specific case, so you can crash HackStudio to your heart's content. :^) Also, we were unveiling the executable path twice, once manually and once implicitly as part of the coredump's libraries, so we now check for the latter and avoid it. Thanks to Daniel for noticing what was right in front of me and I didn't see! Co-authored-by: Daniel Bertalan <dani@danielbertalan.dev>
This commit is contained in:
parent
1662213737
commit
94f2508519
1 changed files with 11 additions and 4 deletions
|
@ -165,14 +165,21 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
if (unlink_on_exit)
|
||||
TRY(Core::System::unveil(coredump_path, "c"));
|
||||
TRY(Core::System::unveil(executable_path.characters(), "r"));
|
||||
TRY(Core::System::unveil("/bin/HackStudio", "rx"));
|
||||
|
||||
// If the executable is HackStudio, then the two unveil()s would conflict!
|
||||
if (executable_path == "/bin/HackStudio") {
|
||||
TRY(Core::System::unveil("/bin/HackStudio", "rx"));
|
||||
} else {
|
||||
TRY(Core::System::unveil(executable_path.characters(), "r"));
|
||||
TRY(Core::System::unveil("/bin/HackStudio", "rx"));
|
||||
}
|
||||
|
||||
TRY(Core::System::unveil("/res", "r"));
|
||||
TRY(Core::System::unveil("/tmp/portal/launch", "rw"));
|
||||
TRY(Core::System::unveil("/usr/lib", "r"));
|
||||
coredump->for_each_library([](auto library_info) {
|
||||
coredump->for_each_library([&executable_path](auto library_info) {
|
||||
// FIXME: Make for_each_library propagate ErrorOr values so we can use TRY.
|
||||
if (library_info.path.starts_with('/'))
|
||||
if (library_info.path.starts_with('/') && library_info.path != executable_path)
|
||||
MUST(Core::System::unveil(library_info.path, "r"));
|
||||
});
|
||||
TRY(Core::System::unveil(nullptr, nullptr));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue