kernel:Add Huawei hisi check (#1545)
Use huawei_hisi_check.h to determine whether it is an old Huawei HiSilicon device. Solve: 1. Compatible with non-GKI Huawei HiSilicon devices 2. Solve different bugs in EMUI of different system versions 3. Does not affect other devices
This commit is contained in:
@@ -618,7 +618,7 @@ static int ksu_task_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
// kernel 4.4 and 4.9
|
// 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,
|
static int ksu_key_permission(key_ref_t key_ref, const struct cred *cred,
|
||||||
unsigned perm)
|
unsigned perm)
|
||||||
{
|
{
|
||||||
@@ -651,7 +651,7 @@ static struct security_hook_list ksu_hooks[] = {
|
|||||||
LSM_HOOK_INIT(task_prctl, ksu_task_prctl),
|
LSM_HOOK_INIT(task_prctl, ksu_task_prctl),
|
||||||
LSM_HOOK_INIT(inode_rename, ksu_inode_rename),
|
LSM_HOOK_INIT(inode_rename, ksu_inode_rename),
|
||||||
LSM_HOOK_INIT(task_fix_setuid, ksu_task_fix_setuid),
|
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)
|
LSM_HOOK_INIT(key_permission, ksu_key_permission)
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,8 +8,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "linux/uaccess.h"
|
#include "linux/uaccess.h"
|
||||||
#include "klog.h" // IWYU pragma: keep
|
#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/key.h"
|
||||||
#include "linux/errno.h"
|
#include "linux/errno.h"
|
||||||
#include "linux/cred.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)
|
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 &&
|
if (init_session_keyring != NULL && !current_cred()->session_keyring &&
|
||||||
(current->flags & PF_WQ_WORKER)) {
|
(current->flags & PF_WQ_WORKER)) {
|
||||||
pr_info("installing init session keyring for older kernel\n");
|
pr_info("installing init session keyring for older kernel\n");
|
||||||
|
|||||||
@@ -4,12 +4,27 @@
|
|||||||
#include "linux/fs.h"
|
#include "linux/fs.h"
|
||||||
#include "linux/key.h"
|
#include "linux/key.h"
|
||||||
#include "linux/version.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,
|
extern long ksu_strncpy_from_user_nofault(char *dst,
|
||||||
const void __user *unsafe_addr,
|
const void __user *unsafe_addr,
|
||||||
long count);
|
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;
|
extern struct key *init_session_keyring;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -6,23 +6,10 @@
|
|||||||
|
|
||||||
#include "../klog.h" // IWYU pragma: keep
|
#include "../klog.h" // IWYU pragma: keep
|
||||||
#include "ss/symtab.h"
|
#include "ss/symtab.h"
|
||||||
|
#include "../kernel_compat.h" // Add check Huawei Device
|
||||||
|
|
||||||
#define KSU_SUPPORT_ADD_TYPE
|
#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
|
// Declaration
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
|
|||||||
Reference in New Issue
Block a user