summaryrefslogtreecommitdiff
path: root/fs/ksmbd/vfs.c
diff options
context:
space:
mode:
authorNamjae Jeon <namjae.jeon@samsung.com>2021-06-29 03:22:16 +0300
committerNamjae Jeon <namjae.jeon@samsung.com>2021-06-29 09:07:44 +0300
commit493fa2fbe4597db474e43d38fb8805cbaef654ac (patch)
treef53ab4bb9c7ef19199531353402eeae729ca4253 /fs/ksmbd/vfs.c
parenta5a25a114ab2412831f063361360eb1192ca6151 (diff)
downloadlinux-493fa2fbe4597db474e43d38fb8805cbaef654ac.tar.xz
ksmbd: fix dentry racy with rename()
Using ->d_name can be broken due to races with rename(). So use %pd with ->d_name to print filename and In other cases, use it under ->d_lock. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/ksmbd/vfs.c')
-rw-r--r--fs/ksmbd/vfs.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 6181a58e8a33..ed1c0626e205 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -365,7 +365,8 @@ int ksmbd_vfs_read(struct ksmbd_work *work, struct ksmbd_file *fp, size_t count,
if (work->conn->connection_type) {
if (!(fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) {
- pr_err("no right to read(%s)\n", FP_FILENAME(fp));
+ pr_err("no right to read(%pd)\n",
+ fp->filp->f_path.dentry);
return -EACCES;
}
}
@@ -473,7 +474,8 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,
if (sess->conn->connection_type) {
if (!(fp->daccess & FILE_WRITE_DATA_LE)) {
- pr_err("no right to write(%s)\n", FP_FILENAME(fp));
+ pr_err("no right to write(%pd)\n",
+ fp->filp->f_path.dentry);
err = -EACCES;
goto out;
}
@@ -512,8 +514,8 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,
if (sync) {
err = vfs_fsync_range(filp, offset, offset + *written, 0);
if (err < 0)
- pr_err("fsync failed for filename = %s, err = %d\n",
- FP_FILENAME(fp), err);
+ pr_err("fsync failed for filename = %pd, err = %d\n",
+ fp->filp->f_path.dentry, err);
}
out:
@@ -1707,11 +1709,11 @@ int ksmbd_vfs_copy_file_ranges(struct ksmbd_work *work,
*total_size_written = 0;
if (!(src_fp->daccess & (FILE_READ_DATA_LE | FILE_EXECUTE_LE))) {
- pr_err("no right to read(%s)\n", FP_FILENAME(src_fp));
+ pr_err("no right to read(%pd)\n", src_fp->filp->f_path.dentry);
return -EACCES;
}
if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) {
- pr_err("no right to write(%s)\n", FP_FILENAME(dst_fp));
+ pr_err("no right to write(%pd)\n", dst_fp->filp->f_path.dentry);
return -EACCES;
}