@@ -208,7 +208,7 @@ static int process_measurement(struct file *file, const struct cred *cred,
208
208
u32 secid , char * buf , loff_t size , int mask ,
209
209
enum ima_hooks func )
210
210
{
211
- struct inode * backing_inode , * inode = file_inode (file );
211
+ struct inode * real_inode , * inode = file_inode (file );
212
212
struct ima_iint_cache * iint = NULL ;
213
213
struct ima_template_desc * template_desc = NULL ;
214
214
char * pathbuf = NULL ;
@@ -285,14 +285,16 @@ static int process_measurement(struct file *file, const struct cred *cred,
285
285
iint -> measured_pcrs = 0 ;
286
286
}
287
287
288
- /* Detect and re-evaluate changes made to the backing file. */
289
- backing_inode = d_real_inode (file_dentry (file ));
290
- if (backing_inode != inode &&
288
+ /*
289
+ * On stacked filesystems, detect and re-evaluate file data changes.
290
+ */
291
+ real_inode = d_real_inode (file_dentry (file ));
292
+ if (real_inode != inode &&
291
293
(action & IMA_DO_MASK ) && (iint -> flags & IMA_DONE_MASK )) {
292
- if (!IS_I_VERSION (backing_inode ) ||
293
- backing_inode -> i_sb -> s_dev != iint -> real_dev ||
294
- backing_inode -> i_ino != iint -> real_ino ||
295
- !inode_eq_iversion (backing_inode , iint -> version )) {
294
+ if (!IS_I_VERSION (real_inode ) ||
295
+ real_inode -> i_sb -> s_dev != iint -> real_dev ||
296
+ real_inode -> i_ino != iint -> real_ino ||
297
+ !inode_eq_iversion (real_inode , iint -> version )) {
296
298
iint -> flags &= ~IMA_DONE_MASK ;
297
299
iint -> measured_pcrs = 0 ;
298
300
}
0 commit comments