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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:22:11 +0000 (16:22 +0200)
commitcd52323ac4c1ba42660f0478ec7a40ea92b78714
tree6d0e177dffe8f9c22e753e925e321950558e5c6f
parent0cbbb029ffe9b5fc2c16fdd8a679563ca7d8f599
integrity: Fix possible multiple allocation in integrity_inode_get()

commit 9df6a4870dc371136e90330cfbbc51464ee66993 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
security/integrity/iint.c