Skip to content

Commit bb19eb9

Browse files
committed
Update lsm_hooks_static.c
1 parent 363d537 commit bb19eb9

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

kernel/hook/lsm_hooks_static.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,26 @@ int main() {
4343
// so we can do this like on x86 where 74 xx to 74 yy
4444
// bl is call+ret equivalent on x86 though
4545

46-
47-
// rename
46+
# if 0
4847
extern int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags);
4948
__attribute__((hot))
5049
static __nocfi int ksu_inode_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags)
5150
{
5251
ksu_rename_observer(old_dentry, new_dentry);
5352
return security_inode_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
5453
}
54+
#endif
55+
56+
extern int vfs_rename(struct renamedata *rd);
57+
__attribute__((hot))
58+
static __nocfi int ksu_vfs_rename(struct renamedata *rd)
59+
{
60+
int ret = vfs_rename(rd);
61+
if (!ret)
62+
ksu_rename_observer(rd->old_dentry, rd->new_dentry);
63+
64+
return ret;
65+
}
5566

5667
// setuid
5768
extern int security_task_fix_setuid(struct cred *new, const struct cred *old, int flags);
@@ -109,6 +120,8 @@ static void __init ksu_core_init(void)
109120
uintptr_t target_callsite;
110121
uintptr_t symbol_addr;
111122

123+
124+
#if 0
112125
// rename
113126
extern int vfs_rename(struct renamedata *rd);
114127
target_callsite = (uintptr_t)&vfs_rename;
@@ -117,6 +130,16 @@ static void __init ksu_core_init(void)
117130
ret = arm64_bl_patch(target_callsite, 256 * sizeof(void *), symbol_addr, (uintptr_t)&ksu_inode_rename);
118131
pr_info("lsm_hijack: security_inode_rename: ret %d \n", ret);
119132
symbol_addr = NULL;
133+
#endif
134+
135+
extern int do_renameat2(int olddfd, struct filename *from, int newdfd, struct filename *to, unsigned int flags);
136+
target_callsite = (uintptr_t)&do_renameat2;
137+
symbol_addr = (uintptr_t)&vfs_rename;
138+
139+
ret = arm64_bl_patch(target_callsite, 256 * sizeof(void *), symbol_addr, (uintptr_t)&ksu_vfs_rename);
140+
pr_info("lsm_hijack: vfs_rename: ret %d \n", ret);
141+
symbol_addr = NULL;
142+
120143

121144
// setuid
122145
extern long __sys_setresuid(uid_t ruid, uid_t euid, uid_t suid);

0 commit comments

Comments
 (0)