|
46 | 46 | #define DEBUG_EXECUTOR "/debug_ramdisk/executor"
|
47 | 47 | #define NEW_MAGISK_PATH "/debug_ramdisk/magisk"
|
48 | 48 |
|
| 49 | +#define INITRC "/init.rc" |
49 | 50 | #define INITRC_SYSTEM "/system/etc/init/hw/init.rc"
|
50 | 51 | #define INIT_BIN_SYSTEM "/system/bin/init"
|
51 | 52 |
|
| 53 | +#define LIBSELINUX "/system/lib/libselinux.so" |
| 54 | +#define LIBSELINUX64 "/system/lib64/libselinux.so" |
| 55 | + |
52 | 56 |
|
53 | 57 | bool check_fs_decrypted() {
|
54 | 58 | struct dirent *entry;
|
@@ -79,7 +83,7 @@ int unhide_process(pid_t pid) {
|
79 | 83 |
|
80 | 84 | char buf[32];
|
81 | 85 | snprintf(buf, 31, "/proc/%d", pid);
|
82 |
| - return umount(buf); |
| 86 | + return umount2(buf, MNT_DETACH); |
83 | 87 | }
|
84 | 88 |
|
85 | 89 | void block_signals() {
|
@@ -249,11 +253,21 @@ int main(int argc, char** argv, char** envp) {
|
249 | 253 | delprop(svc_name.c_str());
|
250 | 254 | }
|
251 | 255 |
|
252 |
| - // Unmount init.rc on android 11+ (if no magisk, i.e. revshell is not at debug_ramdisk) |
253 |
| - if (access(INITRC_SYSTEM, F_OK) == 0 && access(DEBUG_REVSHELL, F_OK) != 0) { |
254 |
| - ALOGD("Unmounting new init.rc"); |
255 |
| - umount2(INITRC_SYSTEM, MNT_DETACH); |
| 256 | + // Unmount init.rc in ramdisk |
| 257 | + umount2(INITRC, MNT_DETACH); |
| 258 | + |
| 259 | + // Unmount SAR stuff in /system (if no magisk in debug_ramdisk) |
| 260 | + if (access(INIT_BIN_SYSTEM, F_OK) == 0 && access(NEW_MAGISK_PATH, F_OK) != 0) { |
| 261 | + ALOGD("Unmounting SAR stuff"); |
256 | 262 | umount2(INIT_BIN_SYSTEM, MNT_DETACH);
|
| 263 | + // Unmount init.rc on android 11+ |
| 264 | + if (access(INITRC_SYSTEM, F_OK) == 0) |
| 265 | + umount2(INITRC_SYSTEM, MNT_DETACH); |
| 266 | + // Unmount libselinux |
| 267 | + if (access(LIBSELINUX64, F_OK) == 0) |
| 268 | + umount2(LIBSELINUX64, MNT_DETACH); |
| 269 | + else if (access(LIBSELINUX, F_OK) == 0) |
| 270 | + umount2(LIBSELINUX, MNT_DETACH); |
257 | 271 | }
|
258 | 272 |
|
259 | 273 | // Cleanup /sbin on rootfs
|
|
0 commit comments