mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-17 20:08:30 +00:00
![topjohnwu](/assets/img/avatar_default.png)
Android Q init assumes rootfs to always be on EXT4 images, thus never runs restorecon on the whole root directory. This is an issue because some folders in rootfs were set with special selabels in the system partition, but when copying over to initramfs by magiskinit, these labels will not be preserved. So the solution is to relabel the files in rootfs with the original context right? Yes, but rootfs does not allow security xattr to be set on files before the kernel SELinux initializes with genfs_contexts. We have to load our sepolicy to the kernel before we clone the root directory from system partition, which we will also restore the selabel in the meantime. Unfortunately this means that for each reboot, the exact same policy will be loaded to the kernel twice: once in magiskinit so we can label rootfs properly, and once by the original init, which is part of the boot procedure. There is no easy way to prevent init from loading sepolicy, as init will refuse to continue if policy loading has failed.
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
/* magisk.h - Top header
|
|
*/
|
|
|
|
#ifndef _MAGISK_H_
|
|
#define _MAGISK_H_
|
|
|
|
#include <logging.h>
|
|
|
|
#define MAIN_SOCKET "d30138f2310a9fb9c54a3e0c21f58591"
|
|
#define LOG_SOCKET "5864cd77f2f8c59b3882e2d35dbf51e4"
|
|
#define JAVA_PACKAGE_NAME "com.topjohnwu.magisk"
|
|
#define LOGFILE "/cache/magisk.log"
|
|
#define UNBLOCKFILE "/dev/.magisk_unblock"
|
|
#define EARLYINIT "/dev/.magisk_early_init"
|
|
#define EARLYINITDONE "/dev/.magisk_early_init_done"
|
|
#define DISABLEFILE "/cache/.disable_magisk"
|
|
#define MAGISKTMP "/sbin/.magisk"
|
|
#define MIRRDIR MAGISKTMP "/mirror"
|
|
#define BBPATH MAGISKTMP "/busybox"
|
|
#define MODULEMNT MAGISKTMP "/modules"
|
|
#define SECURE_DIR "/data/adb"
|
|
#define MODULEROOT SECURE_DIR "/modules"
|
|
#define MODULEUPGRADE SECURE_DIR "/modules_update"
|
|
#define DATABIN SECURE_DIR "/magisk"
|
|
#define MAGISKDB SECURE_DIR "/magisk.db"
|
|
#define SIMPLEMOUNT SECURE_DIR "/magisk_simple"
|
|
#define BOOTCOUNT SECURE_DIR "/.boot_count"
|
|
#define MANAGERAPK DATABIN "/magisk.apk"
|
|
|
|
// Legacy crap
|
|
#define LEGACYCORE MODULEROOT "/.core"
|
|
|
|
// selinux consts
|
|
#define SELINUX_MNT "/sys/fs/selinux"
|
|
#define SELINUX_ENFORCE SELINUX_MNT "/enforce"
|
|
#define SELINUX_POLICY SELINUX_MNT "/policy"
|
|
#define SELINUX_LOAD SELINUX_MNT "/load"
|
|
#define SELINUX_CONTEXT SELINUX_MNT "/context"
|
|
#define SEPOL_PROC_DOMAIN "magisk"
|
|
#define SEPOL_FILE_DOMAIN "magisk_file"
|
|
|
|
extern int SDK_INT;
|
|
|
|
constexpr const char *applet_names[] = { "magisk", "su", "resetprop", "magiskhide", nullptr };
|
|
constexpr const char *init_applet[] = { "magiskpolicy", "supolicy", nullptr };
|
|
|
|
// Multi-call entrypoints
|
|
int magisk_main(int argc, char *argv[]);
|
|
int magiskhide_main(int argc, char *argv[]);
|
|
int magiskpolicy_main(int argc, char *argv[]);
|
|
int su_client_main(int argc, char *argv[]);
|
|
int resetprop_main(int argc, char *argv[]);
|
|
|
|
#endif
|