Messages in this thread | | | From | "Sungjong Seo" <> | Subject | RE: [PATCH v1] exfat: fix unexpected EOF while reading dir | Date | Thu, 29 Dec 2022 11:25:58 +0900 |
| |
> 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
| |