diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2021-01-05 20:19:11 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2021-01-16 21:12:08 +0100 |
commit | 23d8f5b684fc30126b7708cad38b753eaa078b3e (patch) | |
tree | 9eae0ddb102d6150b04d8de53197bf2f57aac508 /security/lsm_audit.c | |
parent | new helper: d_find_alias_rcu() (diff) | |
download | linux-23d8f5b684fc30126b7708cad38b753eaa078b3e.tar.xz linux-23d8f5b684fc30126b7708cad38b753eaa078b3e.zip |
make dump_common_audit_data() safe to be called from RCU pathwalk
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'security/lsm_audit.c')
-rw-r--r-- | security/lsm_audit.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/security/lsm_audit.c b/security/lsm_audit.c index a0cd28cd31a8..82ce14933513 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c @@ -291,18 +291,19 @@ static void dump_common_audit_data(struct audit_buffer *ab, struct dentry *dentry; struct inode *inode; + rcu_read_lock(); inode = a->u.inode; - dentry = d_find_alias(inode); + dentry = d_find_alias_rcu(inode); if (dentry) { audit_log_format(ab, " name="); spin_lock(&dentry->d_lock); audit_log_untrustedstring(ab, dentry->d_name.name); spin_unlock(&dentry->d_lock); - dput(dentry); } audit_log_format(ab, " dev="); audit_log_untrustedstring(ab, inode->i_sb->s_id); audit_log_format(ab, " ino=%lu", inode->i_ino); + rcu_read_unlock(); break; } case LSM_AUDIT_DATA_TASK: { |