Revert renaming symbols in KernelSU driver
- In order to reduce the extra patch code and increase the rate of hunk succeed, we do not rename the symbols in KernelSU drvier but instead do it all in kernel/kallsym.c - Make susfs_starts_with() global as it maybe useful in future Co-authored-by: simonpunk <simonpunk2016@gmail.com>
This commit is contained in:
@@ -141,19 +141,19 @@ config KSU_SUSFS_SUS_KSTAT
|
|||||||
- Effective only on zygote spawned user app process.
|
- Effective only on zygote spawned user app process.
|
||||||
|
|
||||||
config KSU_SUSFS_TRY_UMOUNT
|
config KSU_SUSFS_TRY_UMOUNT
|
||||||
bool "Enable to use ksu's ksu_try_umount"
|
bool "Enable to use ksu's try_umount"
|
||||||
depends on KSU_SUSFS
|
depends on KSU_SUSFS
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
- Allow using ksu_try_umount to umount other user-defined mount paths prior to ksu's default umount paths.
|
- Allow using try_umount to umount other user-defined mount paths prior to ksu's default umount paths.
|
||||||
- Effective on all NO-root-access-granted processes.
|
- Effective on all NO-root-access-granted processes.
|
||||||
|
|
||||||
config KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
|
config KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
|
||||||
bool "Enable to add bind mounts to ksu's ksu_try_umount automatically (experimental)"
|
bool "Enable to add bind mounts to ksu's try_umount automatically (experimental)"
|
||||||
depends on KSU_SUSFS_TRY_UMOUNT
|
depends on KSU_SUSFS_TRY_UMOUNT
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
- Automatically add binded mounts to ksu's ksu_try_umount.
|
- Automatically add binded mounts to ksu's try_umount.
|
||||||
- No susfs command is needed in userspace.
|
- No susfs command is needed in userspace.
|
||||||
- Only mount operation from process with ksu domain will be checked.
|
- Only mount operation from process with ksu domain will be checked.
|
||||||
|
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ bool __ksu_is_allow_uid(uid_t uid)
|
|||||||
|
|
||||||
if (unlikely(uid == 0)) {
|
if (unlikely(uid == 0)) {
|
||||||
// already root, but only allow our domain.
|
// already root, but only allow our domain.
|
||||||
return ksu_is_ksu_domain();
|
return is_ksu_domain();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forbid_system_uid(uid)) {
|
if (forbid_system_uid(uid)) {
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ module_param_cb(ksu_debug_manager_uid, &expected_size_ops,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool ksu_is_manager_apk(char *path)
|
bool is_manager_apk(char *path)
|
||||||
{
|
{
|
||||||
return check_v2_signature(path, false, NULL);
|
return check_v2_signature(path, false, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include "ksu.h"
|
#include "ksu.h"
|
||||||
|
|
||||||
bool ksu_is_manager_apk(char *path);
|
bool is_manager_apk(char *path);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
#ifdef CONFIG_KSU_SUSFS
|
#ifdef CONFIG_KSU_SUSFS
|
||||||
bool susfs_is_allow_su(void)
|
bool susfs_is_allow_su(void)
|
||||||
{
|
{
|
||||||
if (ksu_is_manager()) {
|
if (is_manager()) {
|
||||||
// we are manager, allow!
|
// we are manager, allow!
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -133,15 +133,15 @@ static inline void susfs_on_post_fs_data(void) {
|
|||||||
|
|
||||||
static bool ksu_module_mounted = false;
|
static bool ksu_module_mounted = false;
|
||||||
|
|
||||||
extern int ksu_handle_sepolicy(unsigned long arg3, void __user *arg4);
|
extern int handle_sepolicy(unsigned long arg3, void __user *arg4);
|
||||||
|
|
||||||
bool ksu_su_compat_enabled = true;
|
static bool ksu_su_compat_enabled = true;
|
||||||
extern void ksu_sucompat_init();
|
extern void ksu_sucompat_init();
|
||||||
extern void ksu_sucompat_exit();
|
extern void ksu_sucompat_exit();
|
||||||
|
|
||||||
static inline bool is_allow_su()
|
static inline bool is_allow_su()
|
||||||
{
|
{
|
||||||
if (ksu_is_manager()) {
|
if (is_manager()) {
|
||||||
// we are manager, allow!
|
// we are manager, allow!
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -229,7 +229,7 @@ static void disable_seccomp(struct task_struct *tsk)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ksu_escape_to_root(void)
|
void escape_to_root(void)
|
||||||
{
|
{
|
||||||
struct cred *newcreds = prepare_creds();
|
struct cred *newcreds = prepare_creds();
|
||||||
if (newcreds == NULL) {
|
if (newcreds == NULL) {
|
||||||
@@ -280,7 +280,7 @@ void ksu_escape_to_root(void)
|
|||||||
spin_lock_irq(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
disable_seccomp(current);
|
disable_seccomp(current);
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
spin_unlock_irq(¤t->sighand->siglock);
|
||||||
ksu_setup_selinux(profile->selinux_domain);
|
setup_selinux(profile->selinux_domain);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry)
|
int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry)
|
||||||
@@ -317,7 +317,7 @@ int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry)
|
|||||||
pr_info("renameat: %s -> %s, new path: %s\n", old_dentry->d_iname,
|
pr_info("renameat: %s -> %s, new path: %s\n", old_dentry->d_iname,
|
||||||
new_dentry->d_iname, buf);
|
new_dentry->d_iname, buf);
|
||||||
|
|
||||||
ksu_track_throne();
|
track_throne();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -366,7 +366,7 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool from_root = 0 == ksu_current_uid();
|
bool from_root = 0 == ksu_current_uid();
|
||||||
bool from_manager = ksu_is_manager();
|
bool from_manager = is_manager();
|
||||||
|
|
||||||
if (!from_root && !from_manager) {
|
if (!from_root && !from_manager) {
|
||||||
// only root or manager can access this interface
|
// only root or manager can access this interface
|
||||||
@@ -390,7 +390,7 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
if (arg2 == CMD_GRANT_ROOT) {
|
if (arg2 == CMD_GRANT_ROOT) {
|
||||||
if (is_allow_su()) {
|
if (is_allow_su()) {
|
||||||
pr_info("allow root for: %d\n", ksu_current_uid());
|
pr_info("allow root for: %d\n", ksu_current_uid());
|
||||||
ksu_escape_to_root();
|
escape_to_root();
|
||||||
if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) {
|
if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) {
|
||||||
pr_err("grant_root: prctl reply error\n");
|
pr_err("grant_root: prctl reply error\n");
|
||||||
}
|
}
|
||||||
@@ -494,7 +494,7 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
if (!post_fs_data_lock) {
|
if (!post_fs_data_lock) {
|
||||||
post_fs_data_lock = true;
|
post_fs_data_lock = true;
|
||||||
pr_info("post-fs-data triggered\n");
|
pr_info("post-fs-data triggered\n");
|
||||||
ksu_on_post_fs_data();
|
on_post_fs_data();
|
||||||
// Initializing Dynamic Signatures
|
// Initializing Dynamic Signatures
|
||||||
ksu_dynamic_manager_init();
|
ksu_dynamic_manager_init();
|
||||||
pr_info("Dynamic sign config loaded during post-fs-data\n");
|
pr_info("Dynamic sign config loaded during post-fs-data\n");
|
||||||
@@ -525,7 +525,7 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
if (!from_root) {
|
if (!from_root) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!ksu_handle_sepolicy(arg3, arg4)) {
|
if (!handle_sepolicy(arg3, arg4)) {
|
||||||
if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) {
|
if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) {
|
||||||
pr_err("sepolicy: prctl reply error\n");
|
pr_err("sepolicy: prctl reply error\n");
|
||||||
}
|
}
|
||||||
@@ -1185,7 +1185,7 @@ static int ksu_sys_umount(const char *mnt, int flags)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
|
#ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
|
||||||
void ksu_try_umount(const char *mnt, bool check_mnt, int flags, uid_t uid)
|
void try_umount(const char *mnt, bool check_mnt, int flags, uid_t uid)
|
||||||
#else
|
#else
|
||||||
static void try_umount(const char *mnt, bool check_mnt, int flags)
|
static void try_umount(const char *mnt, bool check_mnt, int flags)
|
||||||
#endif
|
#endif
|
||||||
@@ -1227,25 +1227,25 @@ static void try_umount(const char *mnt, bool check_mnt, int flags)
|
|||||||
void susfs_try_umount_all(uid_t uid) {
|
void susfs_try_umount_all(uid_t uid) {
|
||||||
susfs_try_umount(uid);
|
susfs_try_umount(uid);
|
||||||
/* For Legacy KSU only */
|
/* For Legacy KSU only */
|
||||||
ksu_try_umount("/system", true, 0, uid);
|
try_umount("/system", true, 0, uid);
|
||||||
ksu_try_umount("/system_ext", true, 0, uid);
|
try_umount("/system_ext", true, 0, uid);
|
||||||
ksu_try_umount("/vendor", true, 0, uid);
|
try_umount("/vendor", true, 0, uid);
|
||||||
ksu_try_umount("/product", true, 0, uid);
|
try_umount("/product", true, 0, uid);
|
||||||
ksu_try_umount("/odm", true, 0, uid);
|
try_umount("/odm", true, 0, uid);
|
||||||
// - For '/data/adb/modules' we pass 'false' here because it is a loop device that we can't determine whether
|
// - For '/data/adb/modules' we pass 'false' here because it is a loop device that we can't determine whether
|
||||||
// its dev_name is KSU or not, and it is safe to just umount it if it is really a mountpoint
|
// its dev_name is KSU or not, and it is safe to just umount it if it is really a mountpoint
|
||||||
ksu_try_umount("/data/adb/modules", false, MNT_DETACH, uid);
|
try_umount("/data/adb/modules", false, MNT_DETACH, uid);
|
||||||
ksu_try_umount("/data/adb/kpm", false, MNT_DETACH, uid);
|
try_umount("/data/adb/kpm", false, MNT_DETACH, uid);
|
||||||
/* For both Legacy KSU and Magic Mount KSU */
|
/* For both Legacy KSU and Magic Mount KSU */
|
||||||
ksu_try_umount("/debug_ramdisk", true, MNT_DETACH, uid);
|
try_umount("/debug_ramdisk", true, MNT_DETACH, uid);
|
||||||
ksu_try_umount("/sbin", false, MNT_DETACH, uid);
|
try_umount("/sbin", false, MNT_DETACH, uid);
|
||||||
|
|
||||||
// try umount hosts file
|
// try umount hosts file
|
||||||
ksu_try_umount("/system/etc/hosts", false, MNT_DETACH, uid);
|
try_umount("/system/etc/hosts", false, MNT_DETACH, uid);
|
||||||
|
|
||||||
// try umount lsposed dex2oat bins
|
// try umount lsposed dex2oat bins
|
||||||
ksu_try_umount("/apex/com.android.art/bin/dex2oat64", false, MNT_DETACH, uid);
|
try_umount("/apex/com.android.art/bin/dex2oat64", false, MNT_DETACH, uid);
|
||||||
ksu_try_umount("/apex/com.android.art/bin/dex2oat32", false, MNT_DETACH, uid);
|
try_umount("/apex/com.android.art/bin/dex2oat32", false, MNT_DETACH, uid);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1286,7 +1286,7 @@ int ksu_handle_setuid(struct cred *new, const struct cred *old)
|
|||||||
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
||||||
// umount for the system process if path DATA_ADB_UMOUNT_FOR_ZYGOTE_SYSTEM_PROCESS exists
|
// umount for the system process if path DATA_ADB_UMOUNT_FOR_ZYGOTE_SYSTEM_PROCESS exists
|
||||||
if (susfs_is_umount_for_zygote_system_process_enabled) {
|
if (susfs_is_umount_for_zygote_system_process_enabled) {
|
||||||
goto out_ksu_try_umount;
|
goto out_try_umount;
|
||||||
}
|
}
|
||||||
#endif // #ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
#endif // #ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
||||||
}
|
}
|
||||||
@@ -1341,7 +1341,7 @@ int ksu_handle_setuid(struct cred *new, const struct cred *old)
|
|||||||
#endif // #ifdef CONFIG_KSU_SUSFS
|
#endif // #ifdef CONFIG_KSU_SUSFS
|
||||||
|
|
||||||
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
||||||
out_ksu_try_umount:
|
out_try_umount:
|
||||||
#endif
|
#endif
|
||||||
if (!ksu_uid_should_umount(new_uid.val)) {
|
if (!ksu_uid_should_umount(new_uid.val)) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1354,7 +1354,7 @@ out_ksu_try_umount:
|
|||||||
// check old process's selinux context, if it is not zygote, ignore it!
|
// check old process's selinux context, if it is not zygote, ignore it!
|
||||||
// because some su apps may setuid to untrusted_app but they are in global mount namespace
|
// because some su apps may setuid to untrusted_app but they are in global mount namespace
|
||||||
// when we umount for such process, that is a disaster!
|
// when we umount for such process, that is a disaster!
|
||||||
bool is_zygote_child = ksu_is_zygote(old->security);
|
bool is_zygote_child = is_zygote(old->security);
|
||||||
#endif
|
#endif
|
||||||
if (!is_zygote_child) {
|
if (!is_zygote_child) {
|
||||||
pr_info("handle umount ignore non zygote child: %d\n",
|
pr_info("handle umount ignore non zygote child: %d\n",
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ int sukisu_is_uid_should_umount(uid_t uid) {
|
|||||||
|
|
||||||
static
|
static
|
||||||
int sukisu_is_current_uid_manager() {
|
int sukisu_is_current_uid_manager() {
|
||||||
return ksu_is_manager();
|
return is_manager();
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ extern void ksu_trace_register();
|
|||||||
extern void ksu_trace_unregister();
|
extern void ksu_trace_unregister();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int __init ksu_kernelsu_init(void)
|
int __init kernelsu_init(void)
|
||||||
{
|
{
|
||||||
pr_info("kernelsu.enabled=%d\n",
|
pr_info("kernelsu.enabled=%d\n",
|
||||||
get_ksu_state());
|
get_ksu_state());
|
||||||
@@ -116,7 +116,7 @@ int __init ksu_kernelsu_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ksu_kernelsu_exit(void)
|
void kernelsu_exit(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_KSU_CMDLINE
|
#ifdef CONFIG_KSU_CMDLINE
|
||||||
if (!get_ksu_state()) {
|
if (!get_ksu_state()) {
|
||||||
@@ -142,8 +142,8 @@ void ksu_kernelsu_exit(void)
|
|||||||
ksu_core_exit();
|
ksu_core_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(ksu_kernelsu_init);
|
module_init(kernelsu_init);
|
||||||
module_exit(ksu_kernelsu_exit);
|
module_exit(kernelsu_exit);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("weishu");
|
MODULE_AUTHOR("weishu");
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ static bool is_boot_phase = true;
|
|||||||
bool ksu_is_compat __read_mostly = false;
|
bool ksu_is_compat __read_mostly = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ksu_on_post_fs_data(void)
|
void on_post_fs_data(void)
|
||||||
{
|
{
|
||||||
static bool done = false;
|
static bool done = false;
|
||||||
if (done) {
|
if (done) {
|
||||||
@@ -206,7 +206,7 @@ int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr,
|
|||||||
first_arg);
|
first_arg);
|
||||||
if (!strcmp(first_arg, "second_stage")) {
|
if (!strcmp(first_arg, "second_stage")) {
|
||||||
pr_info("/system/bin/init second_stage executed\n");
|
pr_info("/system/bin/init second_stage executed\n");
|
||||||
ksu_apply_kernelsu_rules();
|
apply_kernelsu_rules();
|
||||||
init_second_stage_executed = true;
|
init_second_stage_executed = true;
|
||||||
ksu_android_ns_fs_check();
|
ksu_android_ns_fs_check();
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr,
|
|||||||
pr_info("/init first arg: %s\n", first_arg);
|
pr_info("/init first arg: %s\n", first_arg);
|
||||||
if (!strcmp(first_arg, "--second-stage")) {
|
if (!strcmp(first_arg, "--second-stage")) {
|
||||||
pr_info("/init second_stage executed\n");
|
pr_info("/init second_stage executed\n");
|
||||||
ksu_apply_kernelsu_rules();
|
apply_kernelsu_rules();
|
||||||
init_second_stage_executed = true;
|
init_second_stage_executed = true;
|
||||||
ksu_android_ns_fs_check();
|
ksu_android_ns_fs_check();
|
||||||
}
|
}
|
||||||
@@ -267,7 +267,7 @@ int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr,
|
|||||||
(!strcmp(env_value, "1") ||
|
(!strcmp(env_value, "1") ||
|
||||||
!strcmp(env_value, "true"))) {
|
!strcmp(env_value, "true"))) {
|
||||||
pr_info("/init second_stage executed\n");
|
pr_info("/init second_stage executed\n");
|
||||||
ksu_apply_kernelsu_rules();
|
apply_kernelsu_rules();
|
||||||
init_second_stage_executed =
|
init_second_stage_executed =
|
||||||
true;
|
true;
|
||||||
ksu_android_ns_fs_check();
|
ksu_android_ns_fs_check();
|
||||||
@@ -282,7 +282,7 @@ int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr,
|
|||||||
first_app_process = false;
|
first_app_process = false;
|
||||||
pr_info("exec app_process, /data prepared, second_stage: %d\n",
|
pr_info("exec app_process, /data prepared, second_stage: %d\n",
|
||||||
init_second_stage_executed);
|
init_second_stage_executed);
|
||||||
ksu_on_post_fs_data(); // we keep this for old ksud
|
on_post_fs_data(); // we keep this for old ksud
|
||||||
stop_execve_hook();
|
stop_execve_hook();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#define KSUD_PATH "/data/adb/ksud"
|
#define KSUD_PATH "/data/adb/ksud"
|
||||||
|
|
||||||
void ksu_on_post_fs_data(void);
|
void on_post_fs_data(void);
|
||||||
|
|
||||||
bool ksu_is_safe_mode(void);
|
bool ksu_is_safe_mode(void);
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ static inline bool ksu_is_manager_uid_valid()
|
|||||||
return ksu_manager_uid != KSU_INVALID_UID;
|
return ksu_manager_uid != KSU_INVALID_UID;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool ksu_is_manager()
|
static inline bool is_manager()
|
||||||
{
|
{
|
||||||
return unlikely(ksu_is_any_manager(ksu_current_uid()) || ksu_manager_uid == ksu_current_uid());
|
return unlikely(ksu_is_any_manager(ksu_current_uid()) || ksu_manager_uid == ksu_current_uid());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ static struct policydb *get_policydb(void)
|
|||||||
|
|
||||||
static DEFINE_MUTEX(ksu_rules);
|
static DEFINE_MUTEX(ksu_rules);
|
||||||
|
|
||||||
void ksu_apply_kernelsu_rules()
|
void apply_kernelsu_rules()
|
||||||
{
|
{
|
||||||
struct policydb *db;
|
struct policydb *db;
|
||||||
|
|
||||||
if (!ksu_getenforce()) {
|
if (!getenforce()) {
|
||||||
pr_info("SELinux permissive or disabled, apply rules!\n");
|
pr_info("SELinux permissive or disabled, apply rules!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ static void reset_avc_cache()
|
|||||||
selinux_xfrm_notify_policyload();
|
selinux_xfrm_notify_policyload();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ksu_handle_sepolicy(unsigned long arg3, void __user *arg4)
|
int handle_sepolicy(unsigned long arg3, void __user *arg4)
|
||||||
{
|
{
|
||||||
struct policydb *db;
|
struct policydb *db;
|
||||||
|
|
||||||
@@ -244,7 +244,7 @@ int ksu_handle_sepolicy(unsigned long arg3, void __user *arg4)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ksu_getenforce()) {
|
if (!getenforce()) {
|
||||||
pr_info("SELinux permissive or disabled when handle policy!\n");
|
pr_info("SELinux permissive or disabled when handle policy!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ bool __maybe_unused is_ksu_transition(const struct task_security_struct *old_tse
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ksu_setup_selinux(const char *domain)
|
void setup_selinux(const char *domain)
|
||||||
{
|
{
|
||||||
if (transive_to_domain(domain)) {
|
if (transive_to_domain(domain)) {
|
||||||
pr_err("transive domain failed.\n");
|
pr_err("transive domain failed.\n");
|
||||||
@@ -74,12 +74,12 @@ void ksu_setup_selinux(const char *domain)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ksu_setenforce(bool enforce)
|
void setenforce(bool enforce)
|
||||||
{
|
{
|
||||||
__setenforce(enforce);
|
__setenforce(enforce);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ksu_getenforce(void)
|
bool getenforce(void)
|
||||||
{
|
{
|
||||||
if (is_selinux_disabled()) {
|
if (is_selinux_disabled()) {
|
||||||
return false;
|
return false;
|
||||||
@@ -101,7 +101,7 @@ static inline u32 current_sid(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool ksu_is_ksu_domain()
|
bool is_ksu_domain()
|
||||||
{
|
{
|
||||||
char *domain;
|
char *domain;
|
||||||
u32 seclen;
|
u32 seclen;
|
||||||
@@ -117,7 +117,7 @@ bool ksu_is_ksu_domain()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ksu_is_zygote(void *sec)
|
bool is_zygote(void *sec)
|
||||||
{
|
{
|
||||||
struct task_security_struct *tsec = (struct task_security_struct *)sec;
|
struct task_security_struct *tsec = (struct task_security_struct *)sec;
|
||||||
if (!tsec) {
|
if (!tsec) {
|
||||||
|
|||||||
@@ -8,17 +8,17 @@
|
|||||||
#define KSU_COMPAT_USE_SELINUX_STATE
|
#define KSU_COMPAT_USE_SELINUX_STATE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ksu_setup_selinux(const char *);
|
void setup_selinux(const char *);
|
||||||
|
|
||||||
void ksu_setenforce(bool);
|
void setenforce(bool);
|
||||||
|
|
||||||
bool ksu_getenforce(void);
|
bool getenforce(void);
|
||||||
|
|
||||||
bool ksu_is_ksu_domain();
|
bool is_ksu_domain();
|
||||||
|
|
||||||
bool ksu_is_zygote(void *cred);
|
bool is_zygote(void *cred);
|
||||||
|
|
||||||
void ksu_apply_kernelsu_rules();
|
void apply_kernelsu_rules();
|
||||||
|
|
||||||
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
|
||||||
bool susfs_is_sid_equal(void *sec, u32 sid2);
|
bool susfs_is_sid_equal(void *sec, u32 sid2);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#define SU_PATH "/system/bin/su"
|
#define SU_PATH "/system/bin/su"
|
||||||
#define SH_PATH "/system/bin/sh"
|
#define SH_PATH "/system/bin/sh"
|
||||||
|
|
||||||
extern void ksu_escape_to_root();
|
extern void escape_to_root();
|
||||||
|
|
||||||
static const char sh_path[] = "/system/bin/sh";
|
static const char sh_path[] = "/system/bin/sh";
|
||||||
static const char ksud_path[] = KSUD_PATH;
|
static const char ksud_path[] = KSUD_PATH;
|
||||||
@@ -189,7 +189,7 @@ int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr,
|
|||||||
pr_info("do_execveat_common su found\n");
|
pr_info("do_execveat_common su found\n");
|
||||||
memcpy((void *)filename->name, ksud_path, sizeof(ksud_path));
|
memcpy((void *)filename->name, ksud_path, sizeof(ksud_path));
|
||||||
|
|
||||||
ksu_escape_to_root();
|
escape_to_root();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -238,7 +238,7 @@ int ksu_handle_execve_sucompat(int *fd, const char __user **filename_user,
|
|||||||
pr_info("sys_execve su found\n");
|
pr_info("sys_execve su found\n");
|
||||||
*filename_user = ksud_user_path();
|
*filename_user = ksud_user_path();
|
||||||
|
|
||||||
ksu_escape_to_root();
|
escape_to_root();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ FILLDIR_RETURN_TYPE my_actor(struct dir_context *ctx, const char *name,
|
|||||||
apk_data->exists = true;
|
apk_data->exists = true;
|
||||||
list_add_tail(&apk_data->list, &apk_path_hash_list);
|
list_add_tail(&apk_data->list, &apk_path_hash_list);
|
||||||
}
|
}
|
||||||
} else if (ksu_is_manager_apk(dirpath)) {
|
} else if (is_manager_apk(dirpath)) {
|
||||||
crown_manager(dirpath, my_ctx->private_data, 0);
|
crown_manager(dirpath, my_ctx->private_data, 0);
|
||||||
*my_ctx->stop = 1;
|
*my_ctx->stop = 1;
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ static bool is_uid_exist(uid_t uid, char *package, void *data)
|
|||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ksu_track_throne()
|
void track_throne()
|
||||||
{
|
{
|
||||||
struct file *fp =
|
struct file *fp =
|
||||||
ksu_filp_open_compat(SYSTEM_PACKAGES_LIST_PATH, O_RDONLY, 0);
|
ksu_filp_open_compat(SYSTEM_PACKAGES_LIST_PATH, O_RDONLY, 0);
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ void ksu_throne_tracker_init();
|
|||||||
|
|
||||||
void ksu_throne_tracker_exit();
|
void ksu_throne_tracker_exit();
|
||||||
|
|
||||||
void ksu_track_throne();
|
void track_throne();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user