From d4e0d9a902362c544d80302e8011952a3fde6a86 Mon Sep 17 00:00:00 2001 From: Nick Chan Date: Mon, 25 Dec 2023 14:12:41 +0800 Subject: [PATCH] fix some remount issues --- include/payload/payload.h | 5 ++++- src/payload/jailbreakd/bootstrap.c | 19 ++++++++++++++++++- src/payload/loader/remount.c | 5 ++--- src/payload/loader/sysstatuscheck.c | 2 +- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/include/payload/payload.h b/include/payload/payload.h index f889b70..b4a5a2e 100644 --- a/include/payload/payload.h +++ b/include/payload/payload.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #define CHECK_ERROR(action, loop, msg, ...) do { \ @@ -44,7 +45,9 @@ int runCommand(char* argv[]); int setup_fakefs(uint32_t payload_options, struct paleinfo* pinfo_p); int load_etc_rc_d(uint64_t pflags); int create_var_jb(); -int remount(int remount_now); +int remount(void); +int remount_rootfs(struct utsname* name_p); +int remount_preboot(struct utsname* name_p); int get_platform(); void bootstrap(xpc_object_t xrequest, xpc_object_t xreply, struct paleinfo* pinfo); int remove_jailbreak_files(uint64_t pflags); diff --git a/src/payload/jailbreakd/bootstrap.c b/src/payload/jailbreakd/bootstrap.c index b0551ce..5ae9a90 100644 --- a/src/payload/jailbreakd/bootstrap.c +++ b/src/payload/jailbreakd/bootstrap.c @@ -13,6 +13,7 @@ #include #define TARGET_OS_IPHONE 1 #include +#include #include #include #include @@ -106,7 +107,23 @@ void bootstrap(xpc_object_t xrequest, xpc_object_t xreply, struct paleinfo* pinf return; } - if (remount(1)) { + struct utsname name; + ret = uname(&name); + if (ret) { + xpc_dictionary_set_string(xreply, "errorDescription", "remount failed"); + xpc_dictionary_set_int64(xreply, "error", errno); + return; + } + + int (*remount_func)(struct utsname* name_p); + if (pinfo->flags & palerain_option_rootful) { + remount_func = &remount_rootfs; + } else { + remount_func = &remount_preboot; + } + + ret = remount_func(&name); + if (ret) { xpc_dictionary_set_string(xreply, "errorDescription", "remount failed"); xpc_dictionary_set_int64(xreply, "error", errno); return; diff --git a/src/payload/loader/remount.c b/src/payload/loader/remount.c index 8ebd6ef..2e3e540 100644 --- a/src/payload/loader/remount.c +++ b/src/payload/loader/remount.c @@ -32,14 +32,13 @@ int remount_preboot(struct utsname* name_p) { return mount(fs.f_fstypename, fs.f_mntonname, mntflags, &arg); } -int remount(int remount_now) { +int remount(void) { struct utsname name; uname(&name); int ret; if ( access("/.mount_rw", F_OK) == 0 || - access("/.procursus_strapped", F_OK) == 0 || - remount_now + access("/.procursus_strapped", F_OK) == 0 ) { ret = remount_rootfs(&name); diff --git a/src/payload/loader/sysstatuscheck.c b/src/payload/loader/sysstatuscheck.c index 1a8a228..23385f9 100644 --- a/src/payload/loader/sysstatuscheck.c +++ b/src/payload/loader/sysstatuscheck.c @@ -133,7 +133,7 @@ int remove_jailbreak_files(uint64_t pflags) { int fixup_databases(void); int sysstatuscheck(uint32_t payload_options, uint64_t pflags) { printf("plooshInit sysstatuscheck...\n"); - remount(0); + remount(); enable_non_default_system_apps(); if (access("/private/var/dropbear_rsa_host_key", F_OK) != 0) { printf("generating ssh host key...\n");