diff options
Diffstat (limited to 'security/integrity/ima/ima_main.c')
-rw-r--r-- | security/integrity/ima/ima_main.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 2f9b5d50424e..24660bf3f82a 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -94,8 +94,6 @@ static void ima_inc_counts(struct ima_iint_cache *iint, fmode_t mode) if ((mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ) iint->readcount++; - if (mode & FMODE_WRITE) - iint->writecount++; } /* @@ -173,18 +171,16 @@ static void ima_dec_counts(struct ima_iint_cache *iint, struct inode *inode, iint->readcount--; } if (mode & FMODE_WRITE) { - if (unlikely(iint->writecount == 0)) + if (atomic_read(&inode->i_writecount) <= 0) dump = true; - iint->writecount--; - if (iint->writecount == 0) { - if (iint->version != inode->i_version) - iint->flags &= ~IMA_MEASURED; - } + if (atomic_read(&inode->i_writecount) == 1 && + iint->version != inode->i_version) + iint->flags &= ~IMA_MEASURED; } if (dump && !ima_limit_imbalance(file)) { - printk(KERN_INFO "%s: open/free imbalance (r:%u w:%u)\n", - __func__, iint->readcount, iint->writecount); + printk(KERN_INFO "%s: open/free imbalance (r:%u)\n", + __func__, iint->readcount); dump_stack(); } } |