Re: [PATCH] ksmbd: fix incorrect handling of iterate_dir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2022년 8월 23일 (화) 오전 9:40, Namjae Jeon <linkinjeon@xxxxxxxxxx>님이 작성:
>
> 2022-08-22 15:24 GMT+09:00, Hyunchul Lee <hyc.lee@xxxxxxxxx>:
> > 2022년 8월 22일 (월) 오전 11:47, Namjae Jeon <linkinjeon@xxxxxxxxxx>님이 작성:
> >>
> >> 2022-08-22 11:14 GMT+09:00, Hyunchul Lee <hyc.lee@xxxxxxxxx>:
> >> > 2022년 8월 22일 (월) 오전 9:51, Namjae Jeon <linkinjeon@xxxxxxxxxx>님이 작성:
> >> >>
> >> >> 2022-08-19 13:35 GMT+09:00, Hyunchul Lee <hyc.lee@xxxxxxxxx>:
> >> >> > if iterate_dir() returns non-negative value,
> >> >> > caller has to treat it as normal and
> >> >> > check there is any error while populating
> >> >> > dentry information. ksmbd doesn't have to
> >> >> > do anything because ksmbd already
> >> >> > checks too small OutputBufferLength to
> >> >> > store one file information.
> >> >> >
> >> >> > And because ctx->pos is set to file->f_pos
> >> >> > when iterative_dir is called, remove
> >> >> > restart_ctx().
> >> >> Shouldn't we get rid of the useless restart_ctx() ?
> >> >>
> >> >
> >> > There is one place to call this function. We can
> >> > replace that with ctx->pos = 0 and remove this function.
> >> Why should we do ctx->pos = 0 there ?
> >
> > restart_ctx has to be deleted. I misunderstood it,
> >
> >> >
> >> >> >
> >> >> > This patch fixes some failure of
> >> >> > SMB2_QUERY_DIRECTORY, which happens when
> >> >> > ntfs3 is local filesystem.
> >> >> >
> >> >> > Signed-off-by: Hyunchul Lee <hyc.lee@xxxxxxxxx>
> >> >> > ---
> >> >> >  fs/ksmbd/smb2pdu.c | 6 ++----
> >> >> >  1 file changed, 2 insertions(+), 4 deletions(-)
> >> >> >
> >> >> > diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c
> >> >> > index 53c91ab02be2..6716c4e3c16d 100644
> >> >> > --- a/fs/ksmbd/smb2pdu.c
> >> >> > +++ b/fs/ksmbd/smb2pdu.c
> >> >> > @@ -3970,11 +3970,9 @@ int smb2_query_dir(struct ksmbd_work *work)
> >> >> >        */
> >> >> >       if (!d_info.out_buf_len && !d_info.num_entry)
> >> >> >               goto no_buf_len;
> >> >> > -     if (rc == 0)
> >> >> > -             restart_ctx(&dir_fp->readdir_data.ctx);
> >> >> > -     if (rc == -ENOSPC)
> >> >> > +     if (rc > 0 || rc == -ENOSPC)
> >> >> Do you know why -ENOSPC error is ignored ?
> >> >>
> >> >
> >> > I don't know why and can't find the commit history
> >> > for this.
> >> After checking if -ENOSPC error is returned, there is no need to leave
> >> it if it is not needed.
> >
> > In most cases, -ENOSPC is not returned. Because the value
> > is set to the return value from filesystems' iterate or iterate_share,
> > and most file systems don't allocate disk space for this operation.
> >
> > But we cannot guarantee this. So how about changing handling iterate_dir
> > like gendents system call. Even if an error code is returned by
> > iterate_dir,
> > it treats as normal if several child files are iterated and the buffer
> > is filled with
> > information about those.
> Among the errors of the smb2 query directory in the specification,
> there is a file corruption error response
> type(STATUS_FILE_CORRUPT_ERROR).
> Can you check when smb server return that error response for smb2
> query directory?
>

According to MS-REREF, it means "The file or directory is corrupt and
unreadable.
Run the chkdsk utility". And there is no function to return the error in Samba.


> >
> >> >
> >> >> Thanks.
> >> >> >               rc = 0;
> >> >> > -     if (rc)
> >> >> > +     else if (rc)
> >> >> >               goto err_out;
> >> >> >
> >> >> >       d_info.wptr = d_info.rptr;
> >> >> > --
> >> >> > 2.17.1
> >> >> >
> >> >> >
> >> >
> >> >
> >> >
> >> > --
> >> > Thanks,
> >> > Hyunchul
> >> >
> >
> >
> >
> > --
> > Thanks,
> > Hyunchul
> >



-- 
Thanks,
Hyunchul




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux