diff options
author | Stephen Smalley <stephen.smalley.work@gmail.com> | 2024-08-26 08:47:09 -0400 |
---|---|---|
committer | Paul Moore <paul@paul-moore.com> | 2024-08-26 18:39:16 -0400 |
commit | 2571bb9d553ba2b8db1971bd3c903bff07d0bb11 (patch) | |
tree | 3f0462beb870009d0ca64d2c27ced0ec0dbbc71f | |
parent | fc328c869c4128fc1f975b8cfe92e9ec320d477f (diff) |
selinux: annotate false positive data race to avoid KCSAN warnings
KCSAN flags the check of isec->initialized by
__inode_security_revalidate() as a data race. This is indeed a racy
check, but inode_doinit_with_dentry() will recheck with isec->lock held.
Annotate the check with the data_race() macro to silence the KCSAN false
positive.
Reported-by: syzbot+319ed1769c0078257262@syzkaller.appspotmail.com
Signed-off-by: Stephen Smalley <stephen.smalley.work@gmail.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
-rw-r--r-- | security/selinux/hooks.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 55c78c318ccd..70c335846336 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -282,8 +282,13 @@ static int __inode_security_revalidate(struct inode *inode, might_sleep_if(may_sleep); + /* + * The check of isec->initialized below is racy but + * inode_doinit_with_dentry() will recheck with + * isec->lock held. + */ if (selinux_initialized() && - isec->initialized != LABEL_INITIALIZED) { + data_race(isec->initialized != LABEL_INITIALIZED)) { if (!may_sleep) return -ECHILD; |