You've already forked KernelSU-Next
mirror of
https://github.com/KernelSU-Next/KernelSU-Next.git
synced 2025-08-27 23:46:34 +00:00
* ksud: Address pagefault in ksu_handle_execveat_ksud As pointed out by @backslashxx, when strncpy pagefaults, it causes the first_arg to be completely NULL in some systems. This causes second_stage initialization to fail hence causing SU to be non-functional. This patch copies ksu_strncpy_from_user_retry from @backslashxx's commit:e2fe25e485This adds a fallback to perform a normal strncpy_from_user when nofault fails which allows us to get the first_arg in such cases. Co-authored-by: backslashxx <118538522+backslashxx@users.noreply.github.com> Signed-off-by: Edrick Sinsuan <evcsinsuan@gmail.com> * Revert "ksud: Add second_stage init variant (#653)" This reverts commitc6b60a24e8. --------- Signed-off-by: Edrick Sinsuan <evcsinsuan@gmail.com> Co-authored-by: backslashxx <118538522+backslashxx@users.noreply.github.com>
43 lines
1.4 KiB
C
43 lines
1.4 KiB
C
#ifndef __KSU_H_KERNEL_COMPAT
|
|
#define __KSU_H_KERNEL_COMPAT
|
|
|
|
#include <linux/fs.h>
|
|
#include <linux/version.h>
|
|
#include "ss/policydb.h"
|
|
#include "linux/key.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);
|
|
extern long ksu_strncpy_from_user_retry(char *dst,
|
|
const void __user *unsafe_addr,
|
|
long count);
|
|
|
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) || defined(CONFIG_KSU_ALLOWLIST_WORKAROUND)
|
|
extern struct key *init_session_keyring;
|
|
#endif
|
|
|
|
extern void ksu_android_ns_fs_check();
|
|
extern struct file *ksu_filp_open_compat(const char *filename, int flags,
|
|
umode_t mode);
|
|
extern ssize_t ksu_kernel_read_compat(struct file *p, void *buf, size_t count,
|
|
loff_t *pos);
|
|
extern ssize_t ksu_kernel_write_compat(struct file *p, const void *buf,
|
|
size_t count, loff_t *pos);
|
|
|
|
#endif
|