2022-08-18 03:45:50

by Al Viro

[permalink] [raw]
Subject: [PATCH 4/5] ksmbd: don't open-code %pf

Signed-off-by: Al Viro <[email protected]>
---
fs/ksmbd/vfs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 78d01033604c..a0fafba8b5d0 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
+ pr_err("no right to read(%pf)\n", src_fp->filp);
return -EACCES;
}
if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) {
- pr_err("no right to write(%pd)\n", dst_fp->filp->f_path.dentry);
+ pr_err("no right to write(%pf)\n", dst_fp->filp);
return -EACCES;
}

--
2.30.2


2022-08-18 06:31:02

by Namjae Jeon

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

2022-08-18 11:59 GMT+09:00, Al Viro <[email protected]>:
> Signed-off-by: Al Viro <[email protected]>
> ---
> fs/ksmbd/vfs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
> index 78d01033604c..a0fafba8b5d0 100644
> --- a/fs/ksmbd/vfs.c
> +++ b/fs/ksmbd/vfs.c
> @@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
> + pr_err("no right to read(%pf)\n", src_fp->filp);
Isn't this probably %pD?

Thanks.
> return -EACCES;
> }
> if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) {
> - pr_err("no right to write(%pd)\n", dst_fp->filp->f_path.dentry);
> + pr_err("no right to write(%pf)\n", dst_fp->filp);
> return -EACCES;
> }
>
> --
> 2.30.2
>
>

2022-08-18 20:47:49

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

On Thu, Aug 18, 2022 at 03:08:36PM +0900, Namjae Jeon wrote:
> 2022-08-18 11:59 GMT+09:00, Al Viro <[email protected]>:
> > Signed-off-by: Al Viro <[email protected]>
> > ---
> > fs/ksmbd/vfs.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
> > index 78d01033604c..a0fafba8b5d0 100644
> > --- a/fs/ksmbd/vfs.c
> > +++ b/fs/ksmbd/vfs.c
> > @@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
> > + pr_err("no right to read(%pf)\n", src_fp->filp);
> Isn't this probably %pD?

*blink*

It certainly is; thanks for catching that braino... While we are at it,
there's several more places of the same form these days, so fixed and
updated variant follows:

ksmbd: don't open-code %pD

a bunch of places used %pd with file->f_path.dentry; shorter (and saner)
way to spell that is %pD with file...

Signed-off-by: Al Viro <[email protected]>
---

diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index 0e1924a6476d..bed670410c37 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -3897,8 +3897,7 @@ int smb2_query_dir(struct ksmbd_work *work)
inode_permission(file_mnt_user_ns(dir_fp->filp),
file_inode(dir_fp->filp),
MAY_READ | MAY_EXEC)) {
- pr_err("no right to enumerate directory (%pd)\n",
- dir_fp->filp->f_path.dentry);
+ pr_err("no right to enumerate directory (%pD)\n", dir_fp->filp);
rc = -EACCES;
goto err_out2;
}
@@ -6269,8 +6268,8 @@ int smb2_read(struct ksmbd_work *work)
goto out;
}

- ksmbd_debug(SMB, "filename %pd, offset %lld, len %zu\n",
- fp->filp->f_path.dentry, offset, length);
+ ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
+ fp->filp, offset, length);

work->aux_payload_buf = kvmalloc(length, GFP_KERNEL | __GFP_ZERO);
if (!work->aux_payload_buf) {
@@ -6534,8 +6533,8 @@ int smb2_write(struct ksmbd_work *work)
data_buf = (char *)(((char *)&req->hdr.ProtocolId) +
le16_to_cpu(req->DataOffset));

- ksmbd_debug(SMB, "filename %pd, offset %lld, len %zu\n",
- fp->filp->f_path.dentry, offset, length);
+ ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
+ fp->filp, offset, length);
err = ksmbd_vfs_write(work, fp, data_buf, length, &offset,
writethrough, &nbytes);
if (err < 0)
diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 78d01033604c..0c04a59cbe60 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -377,8 +377,7 @@ 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(%pd)\n",
- fp->filp->f_path.dentry);
+ pr_err("no right to read(%pD)\n", fp->filp);
return -EACCES;
}
}
@@ -487,8 +486,7 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,

if (work->conn->connection_type) {
if (!(fp->daccess & FILE_WRITE_DATA_LE)) {
- pr_err("no right to write(%pd)\n",
- fp->filp->f_path.dentry);
+ pr_err("no right to write(%pD)\n", fp->filp);
err = -EACCES;
goto out;
}
@@ -527,8 +525,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 = %pd, err = %d\n",
- fp->filp->f_path.dentry, err);
+ pr_err("fsync failed for filename = %pD, err = %d\n",
+ fp->filp, err);
}

out:
@@ -1743,11 +1741,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(%pd)\n", src_fp->filp->f_path.dentry);
+ pr_err("no right to read(%pD)\n", src_fp->filp);
return -EACCES;
}
if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) {
- pr_err("no right to write(%pd)\n", dst_fp->filp->f_path.dentry);
+ pr_err("no right to write(%pD)\n", dst_fp->filp);
return -EACCES;
}

2022-08-19 00:10:19

by Namjae Jeon

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

2022-08-19 5:35 GMT+09:00, Al Viro <[email protected]>:
> On Thu, Aug 18, 2022 at 03:08:36PM +0900, Namjae Jeon wrote:
>> 2022-08-18 11:59 GMT+09:00, Al Viro <[email protected]>:
>> > Signed-off-by: Al Viro <[email protected]>
>> > ---
>> > fs/ksmbd/vfs.c | 4 ++--
>> > 1 file changed, 2 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
>> > index 78d01033604c..a0fafba8b5d0 100644
>> > --- a/fs/ksmbd/vfs.c
>> > +++ b/fs/ksmbd/vfs.c
>> > @@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
>> > + pr_err("no right to read(%pf)\n", src_fp->filp);
>> Isn't this probably %pD?
>
> *blink*
>
> It certainly is; thanks for catching that braino... While we are at it,
> there's several more places of the same form these days, so fixed and
> updated variant follows:
Thanks for updating the patch!
>
> ksmbd: don't open-code %pD
>
> a bunch of places used %pd with file->f_path.dentry; shorter (and saner)
> way to spell that is %pD with file...
>
> Signed-off-by: Al Viro <[email protected]>
Acked-by: Namjae Jeon <[email protected]>

Thanks!
> ---
>
> diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
> index 0e1924a6476d..bed670410c37 100644
> --- a/fs/ksmbd/smb2pdu.c
> +++ b/fs/ksmbd/smb2pdu.c
> @@ -3897,8 +3897,7 @@ int smb2_query_dir(struct ksmbd_work *work)
> inode_permission(file_mnt_user_ns(dir_fp->filp),
> file_inode(dir_fp->filp),
> MAY_READ | MAY_EXEC)) {
> - pr_err("no right to enumerate directory (%pd)\n",
> - dir_fp->filp->f_path.dentry);
> + pr_err("no right to enumerate directory (%pD)\n", dir_fp->filp);
> rc = -EACCES;
> goto err_out2;
> }
> @@ -6269,8 +6268,8 @@ int smb2_read(struct ksmbd_work *work)
> goto out;
> }
>
> - ksmbd_debug(SMB, "filename %pd, offset %lld, len %zu\n",
> - fp->filp->f_path.dentry, offset, length);
> + ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
> + fp->filp, offset, length);
>
> work->aux_payload_buf = kvmalloc(length, GFP_KERNEL | __GFP_ZERO);
> if (!work->aux_payload_buf) {
> @@ -6534,8 +6533,8 @@ int smb2_write(struct ksmbd_work *work)
> data_buf = (char *)(((char *)&req->hdr.ProtocolId) +
> le16_to_cpu(req->DataOffset));
>
> - ksmbd_debug(SMB, "filename %pd, offset %lld, len %zu\n",
> - fp->filp->f_path.dentry, offset, length);
> + ksmbd_debug(SMB, "filename %pD, offset %lld, len %zu\n",
> + fp->filp, offset, length);
> err = ksmbd_vfs_write(work, fp, data_buf, length, &offset,
> writethrough, &nbytes);
> if (err < 0)
> diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
> index 78d01033604c..0c04a59cbe60 100644
> --- a/fs/ksmbd/vfs.c
> +++ b/fs/ksmbd/vfs.c
> @@ -377,8 +377,7 @@ 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(%pd)\n",
> - fp->filp->f_path.dentry);
> + pr_err("no right to read(%pD)\n", fp->filp);
> return -EACCES;
> }
> }
> @@ -487,8 +486,7 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct
> ksmbd_file *fp,
>
> if (work->conn->connection_type) {
> if (!(fp->daccess & FILE_WRITE_DATA_LE)) {
> - pr_err("no right to write(%pd)\n",
> - fp->filp->f_path.dentry);
> + pr_err("no right to write(%pD)\n", fp->filp);
> err = -EACCES;
> goto out;
> }
> @@ -527,8 +525,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 = %pd, err = %d\n",
> - fp->filp->f_path.dentry, err);
> + pr_err("fsync failed for filename = %pD, err = %d\n",
> + fp->filp, err);
> }
>
> out:
> @@ -1743,11 +1741,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(%pd)\n", src_fp->filp->f_path.dentry);
> + pr_err("no right to read(%pD)\n", src_fp->filp);
> return -EACCES;
> }
> if (!(dst_fp->daccess & (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE))) {
> - pr_err("no right to write(%pd)\n", dst_fp->filp->f_path.dentry);
> + pr_err("no right to write(%pD)\n", dst_fp->filp);
> return -EACCES;
> }
>
>

2022-08-20 04:06:43

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

On Fri, Aug 19, 2022 at 08:26:55AM +0900, Namjae Jeon wrote:
> 2022-08-19 5:35 GMT+09:00, Al Viro <[email protected]>:
> > On Thu, Aug 18, 2022 at 03:08:36PM +0900, Namjae Jeon wrote:
> >> 2022-08-18 11:59 GMT+09:00, Al Viro <[email protected]>:
> >> > Signed-off-by: Al Viro <[email protected]>
> >> > ---
> >> > fs/ksmbd/vfs.c | 4 ++--
> >> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >> >
> >> > diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
> >> > index 78d01033604c..a0fafba8b5d0 100644
> >> > --- a/fs/ksmbd/vfs.c
> >> > +++ b/fs/ksmbd/vfs.c
> >> > @@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
> >> > + pr_err("no right to read(%pf)\n", src_fp->filp);
> >> Isn't this probably %pD?
> >
> > *blink*
> >
> > It certainly is; thanks for catching that braino... While we are at it,
> > there's several more places of the same form these days, so fixed and
> > updated variant follows:
> Thanks for updating the patch!

OK... FWIW, I've another ksmbd patch hanging around and it might be
less PITA if I put it + those two patches into never-rebased branch
(for-ksmbd) for ksmbd folks to pull from. Fewer pointless conflicts
that way... The third patch is below:

ksmbd: constify struct path

... in particular, there should never be a non-const pointers to
any file->f_path.

Signed-off-by: Al Viro <[email protected]>
---

diff --git a/fs/ksmbd/misc.c b/fs/ksmbd/misc.c
index df991107ad2c..364a0a463dfc 100644
--- a/fs/ksmbd/misc.c
+++ b/fs/ksmbd/misc.c
@@ -159,7 +159,7 @@ int parse_stream_name(char *filename, char **stream_name, int *s_type)
*/

char *convert_to_nt_pathname(struct ksmbd_share_config *share,
- struct path *path)
+ const struct path *path)
{
char *pathname, *ab_pathname, *nt_pathname;
int share_path_len = share->path_sz;
diff --git a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h
index aae2a252945f..5a0ae2f8e5e7 100644
--- a/fs/ksmbd/misc.h
+++ b/fs/ksmbd/misc.h
@@ -15,7 +15,7 @@ int match_pattern(const char *str, size_t len, const char *pattern);
int ksmbd_validate_filename(char *filename);
int parse_stream_name(char *filename, char **stream_name, int *s_type);
char *convert_to_nt_pathname(struct ksmbd_share_config *share,
- struct path *path);
+ const struct path *path);
int get_nlink(struct kstat *st);
void ksmbd_conv_path_to_unix(char *path);
void ksmbd_strip_last_slash(char *path);
diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
index bed670410c37..2b7b9dad94fc 100644
--- a/fs/ksmbd/smb2pdu.c
+++ b/fs/ksmbd/smb2pdu.c
@@ -2183,7 +2183,7 @@ static noinline int create_smb2_pipe(struct ksmbd_work *work)
* Return: 0 on success, otherwise error
*/
static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,
- struct path *path)
+ const struct path *path)
{
struct user_namespace *user_ns = mnt_user_ns(path->mnt);
char *attr_name = NULL, *value;
@@ -2270,7 +2270,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,
return rc;
}

-static noinline int smb2_set_stream_name_xattr(struct path *path,
+static noinline int smb2_set_stream_name_xattr(const struct path *path,
struct ksmbd_file *fp,
char *stream_name, int s_type)
{
@@ -2309,7 +2309,7 @@ static noinline int smb2_set_stream_name_xattr(struct path *path,
return 0;
}

-static int smb2_remove_smb_xattrs(struct path *path)
+static int smb2_remove_smb_xattrs(const struct path *path)
{
struct user_namespace *user_ns = mnt_user_ns(path->mnt);
char *name, *xattr_list = NULL;
@@ -2343,7 +2343,7 @@ static int smb2_remove_smb_xattrs(struct path *path)
return err;
}

-static int smb2_create_truncate(struct path *path)
+static int smb2_create_truncate(const struct path *path)
{
int rc = vfs_truncate(path, 0);

@@ -2362,7 +2362,7 @@ static int smb2_create_truncate(struct path *path)
return rc;
}

-static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, struct path *path,
+static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, const struct path *path,
struct ksmbd_file *fp)
{
struct xattr_dos_attrib da = {0};
@@ -2385,7 +2385,7 @@ static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, struct path *path,
}

static void smb2_update_xattrs(struct ksmbd_tree_connect *tcon,
- struct path *path, struct ksmbd_file *fp)
+ const struct path *path, struct ksmbd_file *fp)
{
struct xattr_dos_attrib da;
int rc;
@@ -2445,7 +2445,7 @@ static int smb2_creat(struct ksmbd_work *work, struct path *path, char *name,

static int smb2_create_sd_buffer(struct ksmbd_work *work,
struct smb2_create_req *req,
- struct path *path)
+ const struct path *path)
{
struct create_context *context;
struct create_sd_buf_req *sd_buf;
@@ -4160,7 +4160,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp,
int rc, name_len, value_len, xattr_list_len, idx;
ssize_t buf_free_len, alignment_bytes, next_offset, rsp_data_cnt = 0;
struct smb2_ea_info_req *ea_req = NULL;
- struct path *path;
+ const struct path *path;
struct user_namespace *user_ns = file_mnt_user_ns(fp->filp);

if (!(fp->daccess & FILE_READ_EA_LE)) {
@@ -4497,7 +4497,7 @@ static void get_file_stream_info(struct ksmbd_work *work,
struct smb2_file_stream_info *file_info;
char *stream_name, *xattr_list = NULL, *stream_buf;
struct kstat stat;
- struct path *path = &fp->filp->f_path;
+ const struct path *path = &fp->filp->f_path;
ssize_t xattr_list_len;
int nbytes = 0, streamlen, stream_name_len, next, idx = 0;
int buf_free_len;
diff --git a/fs/ksmbd/smbacl.c b/fs/ksmbd/smbacl.c
index 3781bca2c8fc..85c4de640ed3 100644
--- a/fs/ksmbd/smbacl.c
+++ b/fs/ksmbd/smbacl.c
@@ -991,7 +991,7 @@ static void smb_set_ace(struct smb_ace *ace, const struct smb_sid *sid, u8 type,
}

int smb_inherit_dacl(struct ksmbd_conn *conn,
- struct path *path,
+ const struct path *path,
unsigned int uid, unsigned int gid)
{
const struct smb_sid *psid, *creator = NULL;
@@ -1185,7 +1185,7 @@ bool smb_inherit_flags(int flags, bool is_dir)
return false;
}

-int smb_check_perm_dacl(struct ksmbd_conn *conn, struct path *path,
+int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,
__le32 *pdaccess, int uid)
{
struct user_namespace *user_ns = mnt_user_ns(path->mnt);
@@ -1352,7 +1352,7 @@ int smb_check_perm_dacl(struct ksmbd_conn *conn, struct path *path,
}

int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
- struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
+ const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
bool type_check)
{
int rc;
diff --git a/fs/ksmbd/smbacl.h b/fs/ksmbd/smbacl.h
index fcb2c83f2992..f06abf247445 100644
--- a/fs/ksmbd/smbacl.h
+++ b/fs/ksmbd/smbacl.h
@@ -201,12 +201,12 @@ void posix_state_to_acl(struct posix_acl_state *state,
struct posix_acl_entry *pace);
int compare_sids(const struct smb_sid *ctsid, const struct smb_sid *cwsid);
bool smb_inherit_flags(int flags, bool is_dir);
-int smb_inherit_dacl(struct ksmbd_conn *conn, struct path *path,
+int smb_inherit_dacl(struct ksmbd_conn *conn, const struct path *path,
unsigned int uid, unsigned int gid);
-int smb_check_perm_dacl(struct ksmbd_conn *conn, struct path *path,
+int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,
__le32 *pdaccess, int uid);
int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
- struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
+ const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
bool type_check);
void id_to_sid(unsigned int cid, uint sidtype, struct smb_sid *ssid);
void ksmbd_init_domain(u32 *sub_auth);
diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
index 0c04a59cbe60..4fcf96a01c16 100644
--- a/fs/ksmbd/vfs.c
+++ b/fs/ksmbd/vfs.c
@@ -541,7 +541,7 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,
*
* Return: 0 on success, otherwise error
*/
-int ksmbd_vfs_getattr(struct path *path, struct kstat *stat)
+int ksmbd_vfs_getattr(const struct path *path, struct kstat *stat)
{
int err;

@@ -1166,7 +1166,7 @@ static int __caseless_lookup(struct dir_context *ctx, const char *name,
*
* Return: 0 on success, otherwise error
*/
-static int ksmbd_vfs_lookup_in_dir(struct path *dir, char *name, size_t namelen)
+static int ksmbd_vfs_lookup_in_dir(const struct path *dir, char *name, size_t namelen)
{
int ret;
struct file *dfilp;
diff --git a/fs/ksmbd/vfs.h b/fs/ksmbd/vfs.h
index 70da4c0ba7ad..d7542a2dab52 100644
--- a/fs/ksmbd/vfs.h
+++ b/fs/ksmbd/vfs.h
@@ -85,7 +85,7 @@ int ksmbd_vfs_fsync(struct ksmbd_work *work, u64 fid, u64 p_id);
int ksmbd_vfs_remove_file(struct ksmbd_work *work, char *name);
int ksmbd_vfs_link(struct ksmbd_work *work,
const char *oldname, const char *newname);
-int ksmbd_vfs_getattr(struct path *path, struct kstat *stat);
+int ksmbd_vfs_getattr(const struct path *path, struct kstat *stat);
int ksmbd_vfs_fp_rename(struct ksmbd_work *work, struct ksmbd_file *fp,
char *newname);
int ksmbd_vfs_truncate(struct ksmbd_work *work,

2022-08-20 05:45:43

by Namjae Jeon

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

2022-08-20 12:47 GMT+09:00, Al Viro <[email protected]>:
> On Fri, Aug 19, 2022 at 08:26:55AM +0900, Namjae Jeon wrote:
>> 2022-08-19 5:35 GMT+09:00, Al Viro <[email protected]>:
>> > On Thu, Aug 18, 2022 at 03:08:36PM +0900, Namjae Jeon wrote:
>> >> 2022-08-18 11:59 GMT+09:00, Al Viro <[email protected]>:
>> >> > Signed-off-by: Al Viro <[email protected]>
>> >> > ---
>> >> > fs/ksmbd/vfs.c | 4 ++--
>> >> > 1 file changed, 2 insertions(+), 2 deletions(-)
>> >> >
>> >> > diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
>> >> > index 78d01033604c..a0fafba8b5d0 100644
>> >> > --- a/fs/ksmbd/vfs.c
>> >> > +++ b/fs/ksmbd/vfs.c
>> >> > @@ -1743,11 +1743,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(%pd)\n", src_fp->filp->f_path.dentry);
>> >> > + pr_err("no right to read(%pf)\n", src_fp->filp);
>> >> Isn't this probably %pD?
>> >
>> > *blink*
>> >
>> > It certainly is; thanks for catching that braino... While we are at
>> > it,
>> > there's several more places of the same form these days, so fixed and
>> > updated variant follows:
>> Thanks for updating the patch!
>
> OK... FWIW, I've another ksmbd patch hanging around and it might be
> less PITA if I put it + those two patches into never-rebased branch
> (for-ksmbd) for ksmbd folks to pull from. Fewer pointless conflicts
> that way...
Okay, Thanks for this. I'm trying to resend "ksmbd: fix racy issue
from using ->d_parent and ->d_name" patch to you, but It conflict with
these patches:)
We will pull them from that branch if you create it.

> The third patch is below:
>
> ksmbd: constify struct path
>
> ... in particular, there should never be a non-const pointers to
> any file->f_path.
>
> Signed-off-by: Al Viro <[email protected]>
Looks good to me!

Acked-by: Namjae Jeon <[email protected]>

Thanks!
> ---
>
> diff --git a/fs/ksmbd/misc.c b/fs/ksmbd/misc.c
> index df991107ad2c..364a0a463dfc 100644
> --- a/fs/ksmbd/misc.c
> +++ b/fs/ksmbd/misc.c
> @@ -159,7 +159,7 @@ int parse_stream_name(char *filename, char
> **stream_name, int *s_type)
> */
>
> char *convert_to_nt_pathname(struct ksmbd_share_config *share,
> - struct path *path)
> + const struct path *path)
> {
> char *pathname, *ab_pathname, *nt_pathname;
> int share_path_len = share->path_sz;
> diff --git a/fs/ksmbd/misc.h b/fs/ksmbd/misc.h
> index aae2a252945f..5a0ae2f8e5e7 100644
> --- a/fs/ksmbd/misc.h
> +++ b/fs/ksmbd/misc.h
> @@ -15,7 +15,7 @@ int match_pattern(const char *str, size_t len, const char
> *pattern);
> int ksmbd_validate_filename(char *filename);
> int parse_stream_name(char *filename, char **stream_name, int *s_type);
> char *convert_to_nt_pathname(struct ksmbd_share_config *share,
> - struct path *path);
> + const struct path *path);
> int get_nlink(struct kstat *st);
> void ksmbd_conv_path_to_unix(char *path);
> void ksmbd_strip_last_slash(char *path);
> diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
> index bed670410c37..2b7b9dad94fc 100644
> --- a/fs/ksmbd/smb2pdu.c
> +++ b/fs/ksmbd/smb2pdu.c
> @@ -2183,7 +2183,7 @@ static noinline int create_smb2_pipe(struct ksmbd_work
> *work)
> * Return: 0 on success, otherwise error
> */
> static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,
> - struct path *path)
> + const struct path *path)
> {
> struct user_namespace *user_ns = mnt_user_ns(path->mnt);
> char *attr_name = NULL, *value;
> @@ -2270,7 +2270,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf,
> unsigned int buf_len,
> return rc;
> }
>
> -static noinline int smb2_set_stream_name_xattr(struct path *path,
> +static noinline int smb2_set_stream_name_xattr(const struct path *path,
> struct ksmbd_file *fp,
> char *stream_name, int s_type)
> {
> @@ -2309,7 +2309,7 @@ static noinline int smb2_set_stream_name_xattr(struct
> path *path,
> return 0;
> }
>
> -static int smb2_remove_smb_xattrs(struct path *path)
> +static int smb2_remove_smb_xattrs(const struct path *path)
> {
> struct user_namespace *user_ns = mnt_user_ns(path->mnt);
> char *name, *xattr_list = NULL;
> @@ -2343,7 +2343,7 @@ static int smb2_remove_smb_xattrs(struct path *path)
> return err;
> }
>
> -static int smb2_create_truncate(struct path *path)
> +static int smb2_create_truncate(const struct path *path)
> {
> int rc = vfs_truncate(path, 0);
>
> @@ -2362,7 +2362,7 @@ static int smb2_create_truncate(struct path *path)
> return rc;
> }
>
> -static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, struct path
> *path,
> +static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, const struct
> path *path,
> struct ksmbd_file *fp)
> {
> struct xattr_dos_attrib da = {0};
> @@ -2385,7 +2385,7 @@ static void smb2_new_xattrs(struct ksmbd_tree_connect
> *tcon, struct path *path,
> }
>
> static void smb2_update_xattrs(struct ksmbd_tree_connect *tcon,
> - struct path *path, struct ksmbd_file *fp)
> + const struct path *path, struct ksmbd_file *fp)
> {
> struct xattr_dos_attrib da;
> int rc;
> @@ -2445,7 +2445,7 @@ static int smb2_creat(struct ksmbd_work *work, struct
> path *path, char *name,
>
> static int smb2_create_sd_buffer(struct ksmbd_work *work,
> struct smb2_create_req *req,
> - struct path *path)
> + const struct path *path)
> {
> struct create_context *context;
> struct create_sd_buf_req *sd_buf;
> @@ -4160,7 +4160,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct
> ksmbd_file *fp,
> int rc, name_len, value_len, xattr_list_len, idx;
> ssize_t buf_free_len, alignment_bytes, next_offset, rsp_data_cnt = 0;
> struct smb2_ea_info_req *ea_req = NULL;
> - struct path *path;
> + const struct path *path;
> struct user_namespace *user_ns = file_mnt_user_ns(fp->filp);
>
> if (!(fp->daccess & FILE_READ_EA_LE)) {
> @@ -4497,7 +4497,7 @@ static void get_file_stream_info(struct ksmbd_work
> *work,
> struct smb2_file_stream_info *file_info;
> char *stream_name, *xattr_list = NULL, *stream_buf;
> struct kstat stat;
> - struct path *path = &fp->filp->f_path;
> + const struct path *path = &fp->filp->f_path;
> ssize_t xattr_list_len;
> int nbytes = 0, streamlen, stream_name_len, next, idx = 0;
> int buf_free_len;
> diff --git a/fs/ksmbd/smbacl.c b/fs/ksmbd/smbacl.c
> index 3781bca2c8fc..85c4de640ed3 100644
> --- a/fs/ksmbd/smbacl.c
> +++ b/fs/ksmbd/smbacl.c
> @@ -991,7 +991,7 @@ static void smb_set_ace(struct smb_ace *ace, const
> struct smb_sid *sid, u8 type,
> }
>
> int smb_inherit_dacl(struct ksmbd_conn *conn,
> - struct path *path,
> + const struct path *path,
> unsigned int uid, unsigned int gid)
> {
> const struct smb_sid *psid, *creator = NULL;
> @@ -1185,7 +1185,7 @@ bool smb_inherit_flags(int flags, bool is_dir)
> return false;
> }
>
> -int smb_check_perm_dacl(struct ksmbd_conn *conn, struct path *path,
> +int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,
> __le32 *pdaccess, int uid)
> {
> struct user_namespace *user_ns = mnt_user_ns(path->mnt);
> @@ -1352,7 +1352,7 @@ int smb_check_perm_dacl(struct ksmbd_conn *conn,
> struct path *path,
> }
>
> int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
> - struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
> + const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
> bool type_check)
> {
> int rc;
> diff --git a/fs/ksmbd/smbacl.h b/fs/ksmbd/smbacl.h
> index fcb2c83f2992..f06abf247445 100644
> --- a/fs/ksmbd/smbacl.h
> +++ b/fs/ksmbd/smbacl.h
> @@ -201,12 +201,12 @@ void posix_state_to_acl(struct posix_acl_state
> *state,
> struct posix_acl_entry *pace);
> int compare_sids(const struct smb_sid *ctsid, const struct smb_sid
> *cwsid);
> bool smb_inherit_flags(int flags, bool is_dir);
> -int smb_inherit_dacl(struct ksmbd_conn *conn, struct path *path,
> +int smb_inherit_dacl(struct ksmbd_conn *conn, const struct path *path,
> unsigned int uid, unsigned int gid);
> -int smb_check_perm_dacl(struct ksmbd_conn *conn, struct path *path,
> +int smb_check_perm_dacl(struct ksmbd_conn *conn, const struct path *path,
> __le32 *pdaccess, int uid);
> int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
> - struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
> + const struct path *path, struct smb_ntsd *pntsd, int ntsd_len,
> bool type_check);
> void id_to_sid(unsigned int cid, uint sidtype, struct smb_sid *ssid);
> void ksmbd_init_domain(u32 *sub_auth);
> diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c
> index 0c04a59cbe60..4fcf96a01c16 100644
> --- a/fs/ksmbd/vfs.c
> +++ b/fs/ksmbd/vfs.c
> @@ -541,7 +541,7 @@ int ksmbd_vfs_write(struct ksmbd_work *work, struct
> ksmbd_file *fp,
> *
> * Return: 0 on success, otherwise error
> */
> -int ksmbd_vfs_getattr(struct path *path, struct kstat *stat)
> +int ksmbd_vfs_getattr(const struct path *path, struct kstat *stat)
> {
> int err;
>
> @@ -1166,7 +1166,7 @@ static int __caseless_lookup(struct dir_context *ctx,
> const char *name,
> *
> * Return: 0 on success, otherwise error
> */
> -static int ksmbd_vfs_lookup_in_dir(struct path *dir, char *name, size_t
> namelen)
> +static int ksmbd_vfs_lookup_in_dir(const struct path *dir, char *name,
> size_t namelen)
> {
> int ret;
> struct file *dfilp;
> diff --git a/fs/ksmbd/vfs.h b/fs/ksmbd/vfs.h
> index 70da4c0ba7ad..d7542a2dab52 100644
> --- a/fs/ksmbd/vfs.h
> +++ b/fs/ksmbd/vfs.h
> @@ -85,7 +85,7 @@ int ksmbd_vfs_fsync(struct ksmbd_work *work, u64 fid, u64
> p_id);
> int ksmbd_vfs_remove_file(struct ksmbd_work *work, char *name);
> int ksmbd_vfs_link(struct ksmbd_work *work,
> const char *oldname, const char *newname);
> -int ksmbd_vfs_getattr(struct path *path, struct kstat *stat);
> +int ksmbd_vfs_getattr(const struct path *path, struct kstat *stat);
> int ksmbd_vfs_fp_rename(struct ksmbd_work *work, struct ksmbd_file *fp,
> char *newname);
> int ksmbd_vfs_truncate(struct ksmbd_work *work,
>

2022-08-20 15:55:09

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

On Sat, Aug 20, 2022 at 02:44:29PM +0900, Namjae Jeon wrote:
> > OK... FWIW, I've another ksmbd patch hanging around and it might be
> > less PITA if I put it + those two patches into never-rebased branch
> > (for-ksmbd) for ksmbd folks to pull from. Fewer pointless conflicts
> > that way...
> Okay, Thanks for this. I'm trying to resend "ksmbd: fix racy issue
> from using ->d_parent and ->d_name" patch to you, but It conflict with
> these patches:)
> We will pull them from that branch if you create it.

OK, pull request follows:

The following changes since commit 568035b01cfb107af8d2e4bd2fb9aea22cf5b868:

Linux 6.0-rc1 (2022-08-14 15:50:18 -0700)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git tags/pull-ksmbd

for you to fetch changes up to f2ea6d96500dd8947467f774d70700c1ba3ed8ef:

ksmbd: constify struct path (2022-08-20 10:54:48 -0400)

----------------------------------------------------------------
assorted ksmbd cleanups

Al Viro <[email protected]>

----------------------------------------------------------------
Al Viro (3):
ksmbd: don't open-code file_path()
ksmbd: don't open-code %pD
ksmbd: constify struct path

fs/ksmbd/misc.c | 2 +-
fs/ksmbd/misc.h | 2 +-
fs/ksmbd/smb2pdu.c | 33 ++++++++++++++++-----------------
fs/ksmbd/smbacl.c | 6 +++---
fs/ksmbd/smbacl.h | 6 +++---
fs/ksmbd/vfs.c | 18 ++++++++----------
fs/ksmbd/vfs.h | 2 +-
7 files changed, 33 insertions(+), 36 deletions(-)

2022-08-21 02:17:25

by Steve French

[permalink] [raw]
Subject: Re: [PATCH 4/5] ksmbd: don't open-code %pf

merged into ksmbd-for-next

On Sat, Aug 20, 2022 at 10:34 AM Al Viro <[email protected]> wrote:
>
> On Sat, Aug 20, 2022 at 02:44:29PM +0900, Namjae Jeon wrote:
> > > OK... FWIW, I've another ksmbd patch hanging around and it might be
> > > less PITA if I put it + those two patches into never-rebased branch
> > > (for-ksmbd) for ksmbd folks to pull from. Fewer pointless conflicts
> > > that way...
> > Okay, Thanks for this. I'm trying to resend "ksmbd: fix racy issue
> > from using ->d_parent and ->d_name" patch to you, but It conflict with
> > these patches:)
> > We will pull them from that branch if you create it.
>
> OK, pull request follows:
>
> The following changes since commit 568035b01cfb107af8d2e4bd2fb9aea22cf5b868:
>
> Linux 6.0-rc1 (2022-08-14 15:50:18 -0700)
>
> are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git tags/pull-ksmbd
>
> for you to fetch changes up to f2ea6d96500dd8947467f774d70700c1ba3ed8ef:
>
> ksmbd: constify struct path (2022-08-20 10:54:48 -0400)
>
> ----------------------------------------------------------------
> assorted ksmbd cleanups
>
> Al Viro <[email protected]>
>
> ----------------------------------------------------------------
> Al Viro (3):
> ksmbd: don't open-code file_path()
> ksmbd: don't open-code %pD
> ksmbd: constify struct path
>
> fs/ksmbd/misc.c | 2 +-
> fs/ksmbd/misc.h | 2 +-
> fs/ksmbd/smb2pdu.c | 33 ++++++++++++++++-----------------
> fs/ksmbd/smbacl.c | 6 +++---
> fs/ksmbd/smbacl.h | 6 +++---
> fs/ksmbd/vfs.c | 18 ++++++++----------
> fs/ksmbd/vfs.h | 2 +-
> 7 files changed, 33 insertions(+), 36 deletions(-)



--
Thanks,

Steve