@@ -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
4847extern 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 ))
5049static __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
5768extern 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