1
Fork 0
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:
Sam Atkins 2022-01-17 17:36:20 +00:00 committed by Andreas Kling
parent 1662213737
commit 94f2508519

View file

@ -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));