|  | 
| 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