@@ -42,8 +42,13 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
4242 stat -> gid = inode -> i_gid ;
4343 stat -> rdev = inode -> i_rdev ;
4444 stat -> size = i_size_read (inode );
45- stat -> atime = inode -> i_atime ;
46- stat -> mtime = inode -> i_mtime ;
45+ if (is_sidechannel_device (inode ) && !capable_noaudit (CAP_MKNOD )) {
46+ stat -> atime = inode -> i_ctime ;
47+ stat -> mtime = inode -> i_ctime ;
48+ } else {
49+ stat -> atime = inode -> i_atime ;
50+ stat -> mtime = inode -> i_mtime ;
51+ }
4752 stat -> ctime = inode -> i_ctime ;
4853 stat -> blksize = i_blocksize (inode );
4954 stat -> blocks = inode -> i_blocks ;
@@ -79,9 +84,14 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
7984 if (IS_AUTOMOUNT (inode ))
8085 stat -> attributes |= STATX_ATTR_AUTOMOUNT ;
8186
82- if (inode -> i_op -> getattr )
83- return inode -> i_op -> getattr (path , stat , request_mask ,
84- query_flags );
87+ if (inode -> i_op -> getattr ) {
88+ int retval = inode -> i_op -> getattr (path , stat , request_mask , query_flags );
89+ if (!retval && is_sidechannel_device (inode ) && !capable_noaudit (CAP_MKNOD )) {
90+ stat -> atime = stat -> ctime ;
91+ stat -> mtime = stat -> ctime ;
92+ }
93+ return retval ;
94+ }
8595
8696 generic_fillattr (inode , stat );
8797 return 0 ;
0 commit comments