@@ -1289,6 +1289,16 @@ static __always_inline int get_task_syscall_id(struct task_struct *task)
12891289
12901290// HELPERS: VFS ------------------------------------------------------------------------------------
12911291
1292+ static __always_inline u64 get_ctime_nanosec_from_inode (struct inode * inode )
1293+ {
1294+ struct timespec64 ts = READ_KERN (inode -> i_ctime );
1295+ time64_t sec = READ_KERN (ts .tv_sec );
1296+ if (sec < 0 )
1297+ return 0 ;
1298+ long ns = READ_KERN (ts .tv_nsec );
1299+ return (sec * 1000000000L ) + ns ;
1300+ }
1301+
12921302static __always_inline struct dentry * get_mnt_root_ptr_from_vfsmnt (struct vfsmount * vfsmnt )
12931303{
12941304 return READ_KERN (vfsmnt -> mnt_root );
@@ -1320,12 +1330,7 @@ static __always_inline unsigned long get_inode_nr_from_file(struct file *file)
13201330static __always_inline u64 get_ctime_nanosec_from_file (struct file * file )
13211331{
13221332 struct inode * f_inode = READ_KERN (file -> f_inode );
1323- struct timespec64 ts = READ_KERN (f_inode -> i_ctime );
1324- time64_t sec = READ_KERN (ts .tv_sec );
1325- if (sec < 0 )
1326- return 0 ;
1327- long ns = READ_KERN (ts .tv_nsec );
1328- return (sec * 1000000000L ) + ns ;
1333+ return get_ctime_nanosec_from_inode (f_inode );
13291334}
13301335
13311336static __always_inline unsigned short get_inode_mode_from_file (struct file * file )
@@ -1387,6 +1392,25 @@ static __always_inline int check_fd_type(u64 fd, u16 type)
13871392 return 0 ;
13881393}
13891394
1395+ static __always_inline unsigned long get_inode_nr_from_dentry (struct dentry * dentry )
1396+ {
1397+ struct inode * d_inode = READ_KERN (dentry -> d_inode );
1398+ return READ_KERN (d_inode -> i_ino );
1399+ }
1400+
1401+ static __always_inline dev_t get_dev_from_dentry (struct dentry * dentry )
1402+ {
1403+ struct inode * d_inode = READ_KERN (dentry -> d_inode );
1404+ struct super_block * i_sb = READ_KERN (d_inode -> i_sb );
1405+ return READ_KERN (i_sb -> s_dev );
1406+ }
1407+
1408+ static __always_inline u64 get_ctime_nanosec_from_dentry (struct dentry * dentry )
1409+ {
1410+ struct inode * d_inode = READ_KERN (dentry -> d_inode );
1411+ return get_ctime_nanosec_from_inode (d_inode );
1412+ }
1413+
13901414// HELPERS: MEMORY ---------------------------------------------------------------------------------
13911415
13921416static __always_inline struct mm_struct * get_mm_from_task (struct task_struct * task )
@@ -4003,8 +4027,14 @@ int BPF_KPROBE(trace_security_inode_unlink)
40034027 // struct inode *dir = (struct inode *)PT_REGS_PARM1(ctx);
40044028 struct dentry * dentry = (struct dentry * ) PT_REGS_PARM2 (ctx );
40054029 void * dentry_path = get_dentry_path_str (dentry );
4030+ unsigned long inode_nr = get_inode_nr_from_dentry (dentry );
4031+ dev_t dev = get_dev_from_dentry (dentry );
4032+ u64 ctime = get_ctime_nanosec_from_dentry (dentry );
40064033
40074034 save_str_to_buf (& data , dentry_path , 0 );
4035+ save_to_submit_buf (& data , & inode_nr , sizeof (unsigned long ), 1 );
4036+ save_to_submit_buf (& data , & dev , sizeof (dev_t ), 2 );
4037+ save_to_submit_buf (& data , & ctime , sizeof (u64 ), 3 );
40084038
40094039 return events_perf_submit (& data , SECURITY_INODE_UNLINK , 0 );
40104040}
0 commit comments