FTP: everything in the title folder is 0777, and the repair finishes

Users reported FTP permission refusals again. Since v0.6.7 the title usually
hands itself over at once (to the picker or ES-DE, through LoadExec, which ends
the process), so the start-up repair that opens /app0 to FTP was cut short; and
the picker and ES-DE, other executables, wrote with their own modes.
- Files are 0777 as folders are (were 0666): the link-time wrappers and the
  repair (src/permissions_ps5.cpp).
- ps5_permissions_settle waits for the repair (at most a minute) before every
  handover: to a frontend, closing the title, the relaunch test.
- ES-DE's library files and folders, the remembered frontend
  (src/ps5_frontend_choice.h) and the picker's test record are 0777; the picker
  opens RADV's shader cache to FTP after its first 30 frames and again when it
  hands over.

Verified on the base PS5: the trace reads "permissions: /app0 checked=17992
repaired=174 refused=0" then "handover waited 596.2 ms"; after a home-screen
launch held at the picker and closed there, an FTP walk of
/data/homebrew/PPSA99169 finds 17992 entries, 0 not 0777 (before: 175 files
at 0666) (evidence/permissions-0777). tools/verify.sh format, unit and
evidence PASS.
This commit is contained in:
Mihawk committed 2026-10-07 00:00:46 -04:00
1 parent cc5ded25ff
commit 4812ffdee0
11 files changed
+121 -8

No files matched your search

+2
View File
@@ -68,6 +68,7 @@ extern "C" void ps5_crash_report_install();
extern "C" void ps5_core_threads_start();
extern "C" void ps5_sampler_start();
extern "C" void ps5_open_permissions();
extern "C" void ps5_permissions_settle();
/* ../PS5_Vulkan's driver/ps5vk_debug.h: whether VideoOut outlives a swapchain.
* Weak, so a build without the driver links. */
extern "C" void ps5vk_display_retain(bool retain) __attribute__((weak));
@@ -636,6 +637,7 @@ extern "C" void catchReturnFromMain(int status)
/* A game mode game goes back to its frontend, and RetroArch the picker started to
* the picker (src/frontend_mode_ps5.cpp). */
ps5_frontend_after_retroarch(status, ps5_update::exit_requested() ? 1 : 0);
ps5_permissions_settle();
std::fflush(nullptr);
const int result = sceSystemServiceLoadExec("exit", nullptr);
ps5::debug::mark_value("native quit: system service result", result);