lkml.org 
[lkml]   [2022]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH v1] exfat: fix unexpected EOF while reading dir
    Date
    > If the position is not aligned with the dentry size, the return
    > value of readdir() will be NULL and errno is 0, which means the
    > end of the directory stream is reached.
    >
    > If the position is aligned with dentry size, but there is no file
    > or directory at the position, exfat_readdir() will continue to
    > get dentry from the next dentry. So the dentry gotten by readdir()
    > may not be at the position.
    >
    > After this commit, if the position is not aligned with the dentry
    > size, round the position up to the dentry size and continue to get
    > the dentry.
    >
    > Fixes: ca06197382bd ("exfat: add directory operations")
    >
    > Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    > Reviewed-by: Andy Wu <Andy.Wu@sony.com>
    > Reviewed-by: Aoyama Wataru <wataru.aoyama@sony.com>
    > Reported-by: Wang Yugui <wangyugui@e16-tech.com>

    Looks good. Thanks.

    Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>

    > ---
    > fs/exfat/dir.c | 5 +----
    > 1 file changed, 1 insertion(+), 4 deletions(-)
    >
    > diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c
    > index 1dfa67f307f1..1122bee3b634 100644
    > --- a/fs/exfat/dir.c
    > +++ b/fs/exfat/dir.c
    > @@ -234,10 +234,7 @@ static int exfat_iterate(struct file *file, struct
    > dir_context *ctx)
    > fake_offset = 1;
    > }
    >
    > - if (cpos & (DENTRY_SIZE - 1)) {
    > - err = -ENOENT;
    > - goto unlock;
    > - }
    > + cpos = round_up(cpos, DENTRY_SIZE);
    >
    > /* name buffer should be allocated before use */
    > err = exfat_alloc_namebuf(nb);
    > --
    > 2.25.1

    \
     
     \ /
      Last update: 2023-03-26 23:22    [W:4.995 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site