kernel: replace devpts kprobe

This commit is contained in:
weishu
2024-05-16 17:15:52 +08:00
parent d36e365921
commit 31653b11f1

View File

@@ -187,7 +187,8 @@ int ksu_handle_devpts(struct inode *inode)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)
struct inode_security_struct *sec = selinux_inode(inode); struct inode_security_struct *sec = selinux_inode(inode);
#else #else
struct inode_security_struct *sec = (struct inode_security_struct *) inode->i_security; struct inode_security_struct *sec =
(struct inode_security_struct *)inode->i_security;
#endif #endif
if (sec) { if (sec) {
sec->sid = ksu_devpts_sid; sec->sid = ksu_devpts_sid;
@@ -319,22 +320,23 @@ static struct kprobe execve_kp = {
}; };
#endif #endif
static int devpts_get_priv_pre(struct kprobe *p, struct pt_regs *regs) static int pts_unix98_lookup_pre(struct kprobe *p, struct pt_regs *regs)
{ {
struct inode *inode; struct inode *inode;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
struct dentry *dentry = (struct dentry *)PT_REGS_PARM1(regs); struct file *file = (struct file *)PT_REGS_PARM2(regs);
inode = dentry->d_inode; inode = file->f_path.dentry->d_inode;
#else #else
inode = (struct inode *)PT_REGS_PARM1(regs); inode = (struct inode *)PT_REGS_PARM2(regs);
#endif #endif
return ksu_handle_devpts(inode); return ksu_handle_devpts(inode);
} }
static struct kprobe devpts_get_priv_kp = { .symbol_name = "devpts_get_priv", static struct kprobe pts_unix98_lookup_kp = { .symbol_name =
.pre_handler = "pts_unix98_lookup",
devpts_get_priv_pre }; .pre_handler =
pts_unix98_lookup_pre };
#endif #endif
@@ -349,7 +351,7 @@ void ksu_sucompat_init()
pr_info("sucompat: newfstatat_kp: %d\n", ret); pr_info("sucompat: newfstatat_kp: %d\n", ret);
ret = register_kprobe(&faccessat_kp); ret = register_kprobe(&faccessat_kp);
pr_info("sucompat: faccessat_kp: %d\n", ret); pr_info("sucompat: faccessat_kp: %d\n", ret);
ret = register_kprobe(&devpts_get_priv_kp); ret = register_kprobe(&pts_unix98_lookup_kp);
pr_info("sucompat: devpts_kp: %d\n", ret); pr_info("sucompat: devpts_kp: %d\n", ret);
#endif #endif
} }
@@ -360,6 +362,6 @@ void ksu_sucompat_exit()
unregister_kprobe(&execve_kp); unregister_kprobe(&execve_kp);
unregister_kprobe(&newfstatat_kp); unregister_kprobe(&newfstatat_kp);
unregister_kprobe(&faccessat_kp); unregister_kprobe(&faccessat_kp);
unregister_kprobe(&devpts_get_priv_kp); unregister_kprobe(&pts_unix98_lookup_kp);
#endif #endif
} }