Handle zygote restarts

This commit is contained in:
topjohnwu
2022-05-28 22:39:44 -07:00
parent 9c774f96db
commit 490a784993
8 changed files with 33 additions and 6 deletions

View File

@@ -356,7 +356,7 @@ void boot_complete(int client) {
DAEMON_STATE = STATE_BOOT_COMPLETE;
setup_logfile(false);
LOGI("** boot_complete triggered\n");
LOGI("** boot-complete triggered\n");
if (safe_mode)
return;
@@ -366,5 +366,14 @@ void boot_complete(int client) {
xmkdir(SECURE_DIR, 0700);
// Ensure manager exists
need_pkg_refresh();
get_manager(0, nullptr, true);
}
void zygote_restart(int client) {
close(client);
LOGI("** zygote restarted\n");
pkg_xml_ino = 0;
prune_su_access();
}

View File

@@ -5,6 +5,7 @@
extern bool RECOVERY_MODE;
extern int DAEMON_STATE;
extern std::atomic<ino_t> pkg_xml_ino;
// Daemon state
enum : int {

View File

@@ -150,6 +150,9 @@ static void handle_request_async(int client, int code, const sock_cred &cred) {
case MainRequest::BOOT_COMPLETE:
boot_complete(client);
break;
case MainRequest::ZYGOTE_RESTART:
zygote_restart(client);
break;
case MainRequest::SQLITE_CMD:
exec_sql(client);
break;
@@ -233,6 +236,7 @@ static void handle_request(pollfd *pfd) {
case MainRequest::POST_FS_DATA:
case MainRequest::LATE_START:
case MainRequest::BOOT_COMPLETE:
case MainRequest::ZYGOTE_RESTART:
case MainRequest::SQLITE_CMD:
case MainRequest::GET_PATH:
case MainRequest::DENYLIST:

View File

@@ -29,9 +29,8 @@ Options:
Advanced Options (Internal APIs):
--daemon manually start magisk daemon
--stop remove all magisk changes and stop daemon
--[init trigger] start service for init trigger
Supported init triggers:
post-fs-data, service, boot-complete
--[init trigger] callback on init triggers. Valid triggers:
post-fs-data, service, boot-complete, zygote-restart
--unlock-blocks set BLKROSET flag to OFF for all block devices
--restorecon restore selinux context on Magisk files
--clone-attr SRC DEST clone permission, owner, and selinux context
@@ -95,6 +94,9 @@ int magisk_main(int argc, char *argv[]) {
} else if (argv[1] == "--boot-complete"sv) {
close(connect_daemon(MainRequest::BOOT_COMPLETE));
return 0;
} else if (argv[1] == "--zygote-restart"sv) {
close(connect_daemon(MainRequest::ZYGOTE_RESTART));
return 0;
} else if (argv[1] == "--denylist"sv) {
return denylist_cli(argc - 1, argv + 1);
} else if (argc >= 3 && argv[1] == "--sqlite"sv) {

View File

@@ -14,7 +14,7 @@ using namespace std;
// so performance is absolutely critical. Most operations should either have its result cached
// or simply skipped unless necessary.
static atomic<ino_t> pkg_xml_ino = 0;
atomic<ino_t> pkg_xml_ino = 0;
static atomic_flag skip_check;
static pthread_mutex_t pkg_lock = PTHREAD_MUTEX_INITIALIZER;