mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-25 02:07:24 +00:00
Drop API 17 (Android 4.2) support
This commit is contained in:
parent
935bd01f59
commit
9c27d691dd
@ -47,7 +47,7 @@ subprojects {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
if (minSdkVersion == null)
|
if (minSdkVersion == null)
|
||||||
minSdkVersion 17
|
minSdkVersion 18
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ static int (*applet_main[]) (int, char *[]) =
|
|||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
umask(0);
|
umask(0);
|
||||||
dload_selinux();
|
selinux_builtin_impl();
|
||||||
cmdline_logging();
|
cmdline_logging();
|
||||||
init_argv0(argc, argv);
|
init_argv0(argc, argv);
|
||||||
|
|
||||||
|
@ -153,24 +153,23 @@ void SARCompatInit::setup_rootfs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MagiskInit::patch_sepolicy(const char *file) {
|
bool MagiskInit::patch_sepolicy(const char *file) {
|
||||||
bool patch_init = false;
|
bool require_patch = false;
|
||||||
|
|
||||||
if (access(SPLIT_PLAT_CIL, R_OK) == 0) {
|
|
||||||
LOGD("sepol: split policy\n");
|
|
||||||
patch_init = true;
|
|
||||||
} else if (access("/sepolicy", R_OK) == 0) {
|
|
||||||
LOGD("sepol: monolithic policy\n");
|
|
||||||
load_policydb("/sepolicy");
|
|
||||||
} else {
|
|
||||||
LOGD("sepol: no selinux\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mount selinuxfs to communicate with kernel
|
// Mount selinuxfs to communicate with kernel
|
||||||
xmount("selinuxfs", SELINUX_MNT, "selinuxfs", 0, nullptr);
|
xmount("selinuxfs", SELINUX_MNT, "selinuxfs", 0, nullptr);
|
||||||
|
|
||||||
if (patch_init)
|
if (access(SPLIT_PLAT_CIL, R_OK) == 0) {
|
||||||
|
LOGD("sepol: split policy\n");
|
||||||
load_split_cil();
|
load_split_cil();
|
||||||
|
require_patch = true;
|
||||||
|
} else if (access("/sepolicy", R_OK) == 0) {
|
||||||
|
LOGD("sepol: monolithic policy\n");
|
||||||
|
load_policydb("/sepolicy");
|
||||||
|
} else {
|
||||||
|
// Fatal error!!
|
||||||
|
LOGD("sepol: no selinux\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
sepol_magisk_rules();
|
sepol_magisk_rules();
|
||||||
sepol_allow(SEPOL_PROC_DOMAIN, ALL, ALL, ALL);
|
sepol_allow(SEPOL_PROC_DOMAIN, ALL, ALL, ALL);
|
||||||
@ -182,7 +181,7 @@ bool MagiskInit::patch_sepolicy(const char *file) {
|
|||||||
link("/sepolicy", "/sepolicy_debug");
|
link("/sepolicy", "/sepolicy_debug");
|
||||||
}
|
}
|
||||||
|
|
||||||
return patch_init;
|
return require_patch;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr const char wrapper[] =
|
constexpr const char wrapper[] =
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
extern void (*freecon)(char *con);
|
#define freecon free
|
||||||
extern int (*setcon)(const char *con);
|
extern int (*setcon)(const char *con);
|
||||||
extern int (*getfilecon)(const char *path, char **con);
|
extern int (*getfilecon)(const char *path, char **con);
|
||||||
extern int (*lgetfilecon)(const char *path, char **con);
|
extern int (*lgetfilecon)(const char *path, char **con);
|
||||||
@ -32,7 +32,6 @@ void getfilecon_at(int dirfd, const char *name, char **con);
|
|||||||
void setfilecon_at(int dirfd, const char *name, const char *con);
|
void setfilecon_at(int dirfd, const char *name, const char *con);
|
||||||
|
|
||||||
void selinux_builtin_impl();
|
void selinux_builtin_impl();
|
||||||
void dload_selinux();
|
|
||||||
void restorecon();
|
void restorecon();
|
||||||
void restore_rootcon();
|
void restore_rootcon();
|
||||||
|
|
||||||
|
@ -38,10 +38,6 @@ static int stub(int, char **ctx) {
|
|||||||
|
|
||||||
// Builtin implementation
|
// Builtin implementation
|
||||||
|
|
||||||
static void __freecon(char *s) {
|
|
||||||
free(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __setcon(const char *ctx) {
|
static int __setcon(const char *ctx) {
|
||||||
int fd = open("/proc/self/attr/current", O_WRONLY | O_CLOEXEC);
|
int fd = open("/proc/self/attr/current", O_WRONLY | O_CLOEXEC);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
@ -114,7 +110,6 @@ static int __fsetfilecon(int fd, const char *ctx) {
|
|||||||
|
|
||||||
// Function pointers
|
// Function pointers
|
||||||
|
|
||||||
void (*freecon)(char *) = __freecon;
|
|
||||||
int (*setcon)(const char *) = stub;
|
int (*setcon)(const char *) = stub;
|
||||||
int (*getfilecon)(const char *, char **) = stub;
|
int (*getfilecon)(const char *, char **) = stub;
|
||||||
int (*lgetfilecon)(const char *, char **) = stub;
|
int (*lgetfilecon)(const char *, char **) = stub;
|
||||||
@ -146,16 +141,6 @@ void selinux_builtin_impl() {
|
|||||||
fsetfilecon = __fsetfilecon;
|
fsetfilecon = __fsetfilecon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dload_selinux() {
|
|
||||||
if (access("/system/lib/libselinux.so", F_OK))
|
|
||||||
return;
|
|
||||||
/* We only check whether libselinux.so exists but don't dlopen.
|
|
||||||
* For some reason calling symbols returned from dlsym
|
|
||||||
* will result to SEGV_ACCERR on some devices.
|
|
||||||
* Always use builtin implementations for SELinux stuffs. */
|
|
||||||
selinux_builtin_impl();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void restore_syscon(int dirfd) {
|
static void restore_syscon(int dirfd) {
|
||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
|
@ -53,7 +53,7 @@ ui_print "- Target image: $BOOTIMAGE"
|
|||||||
# Detect version and architecture
|
# Detect version and architecture
|
||||||
api_level_arch_detect
|
api_level_arch_detect
|
||||||
|
|
||||||
[ $API -lt 17 ] && abort "! Magisk is only for Android 4.2 and above"
|
[ $API -lt 18 ] && abort "! Magisk is only for Android 4.3 and above"
|
||||||
|
|
||||||
ui_print "- Device platform: $ARCH"
|
ui_print "- Device platform: $ARCH"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user