diff --git a/kernel/core_hook.c b/kernel/core_hook.c index 2282f1b8..cdd36b32 100644 --- a/kernel/core_hook.c +++ b/kernel/core_hook.c @@ -618,7 +618,7 @@ static int ksu_task_prctl(int option, unsigned long arg2, unsigned long arg3, return -ENOSYS; } // kernel 4.4 and 4.9 -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) static int ksu_key_permission(key_ref_t key_ref, const struct cred *cred, unsigned perm) { @@ -651,7 +651,7 @@ static struct security_hook_list ksu_hooks[] = { LSM_HOOK_INIT(task_prctl, ksu_task_prctl), LSM_HOOK_INIT(inode_rename, ksu_inode_rename), LSM_HOOK_INIT(task_fix_setuid, ksu_task_fix_setuid), -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) LSM_HOOK_INIT(key_permission, ksu_key_permission) #endif }; diff --git a/kernel/kernel_compat.c b/kernel/kernel_compat.c index 9c468ca4..1a94f36f 100644 --- a/kernel/kernel_compat.c +++ b/kernel/kernel_compat.c @@ -8,8 +8,9 @@ #endif #include "linux/uaccess.h" #include "klog.h" // IWYU pragma: keep +#include "kernel_compat.h" // Add check Huawei Device -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) #include "linux/key.h" #include "linux/errno.h" #include "linux/cred.h" @@ -78,7 +79,7 @@ void ksu_android_ns_fs_check() struct file *ksu_filp_open_compat(const char *filename, int flags, umode_t mode) { -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) if (init_session_keyring != NULL && !current_cred()->session_keyring && (current->flags & PF_WQ_WORKER)) { pr_info("installing init session keyring for older kernel\n"); diff --git a/kernel/kernel_compat.h b/kernel/kernel_compat.h index f97080d4..8638378b 100644 --- a/kernel/kernel_compat.h +++ b/kernel/kernel_compat.h @@ -4,12 +4,27 @@ #include "linux/fs.h" #include "linux/key.h" #include "linux/version.h" +#include "ss/policydb.h" + +/* + * Adapt to Huawei HISI kernel without affecting other kernels , + * Huawei Hisi Kernel EBITMAP Enable or Disable Flag , + * From ss/ebitmap.h + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)) && \ + (LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)) || \ + (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)) && \ + (LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)) +#ifdef HISI_SELINUX_EBITMAP_RO +#define CONFIG_IS_HW_HISI +#endif +#endif extern long ksu_strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, long count); -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) extern struct key *init_session_keyring; #endif diff --git a/kernel/selinux/sepolicy.c b/kernel/selinux/sepolicy.c index 0e24c103..8d8d9831 100644 --- a/kernel/selinux/sepolicy.c +++ b/kernel/selinux/sepolicy.c @@ -6,23 +6,10 @@ #include "../klog.h" // IWYU pragma: keep #include "ss/symtab.h" +#include "../kernel_compat.h" // Add check Huawei Device #define KSU_SUPPORT_ADD_TYPE -/* - * Adapt to Huawei HISI kernel without affecting other kernels , - * Huawei Hisi Kernel EBITMAP Enable or Disable Flag , - * From ss/ebitmap.h - */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) && \ - LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || \ - LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) && \ - LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) -#ifdef HISI_SELINUX_EBITMAP_RO -#define CONFIG_IS_HW_HISI -#endif -#endif - ////////////////////////////////////////////////////// // Declaration //////////////////////////////////////////////////////