integrity: Fix possible multiple allocation in integrity_inode_get()
authorTianjia Zhang <tianjia.zhang@linux.alibaba.com>
Thu, 1 Jun 2023 06:42:44 +0000 (14:42 +0800)
committerMimi Zohar <zohar@linux.ibm.com>
Thu, 1 Jun 2023 11:25:04 +0000 (07:25 -0400)
commit9df6a4870dc371136e90330cfbbc51464ee66993
tree7dd5e36322665b0ce299910dcea5758df8b32dc7
parentdb1d1e8b9867aae5c3e61ad7859abfcc4a6fd6c7
integrity: Fix possible multiple allocation in integrity_inode_get()

When integrity_inode_get() is querying and inserting the cache, there
is a conditional race in the concurrent environment.

The race condition is the result of not properly implementing
"double-checked locking". In this case, it first checks to see if the
iint cache record exists before taking the lock, but doesn't check
again after taking the integrity_iint_lock.

Fixes: bf2276d10ce5 ("ima: allocating iint improvements")
Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Cc: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
Cc: <stable@vger.kernel.org> # v3.10+
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
security/integrity/iint.c