mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
ksmbd: make __dir_empty() compatible with POSIX
commit ca4974ca954561e79f8871d220bb08f14f64f57c upstream. Some file systems may not provide dot (.) and dot-dot (..) as they are optional in POSIX. ksmbd can misjudge emptiness of a directory in those file systems, since it assumes there are always at least two entries: dot and dot-dot. Just don't count dot and dot-dot. Cc: stable@vger.kernel.org # v6.1+ Signed-off-by: Hobin Woo <hobin.woo@samsung.com> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
12aea49495
commit
da7f1b85e1
@@ -1102,9 +1102,10 @@ static bool __dir_empty(struct dir_context *ctx, const char *name, int namlen,
|
|||||||
struct ksmbd_readdir_data *buf;
|
struct ksmbd_readdir_data *buf;
|
||||||
|
|
||||||
buf = container_of(ctx, struct ksmbd_readdir_data, ctx);
|
buf = container_of(ctx, struct ksmbd_readdir_data, ctx);
|
||||||
buf->dirent_count++;
|
if (!is_dot_dotdot(name, namlen))
|
||||||
|
buf->dirent_count++;
|
||||||
|
|
||||||
return buf->dirent_count <= 2;
|
return !buf->dirent_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1124,7 +1125,7 @@ int ksmbd_vfs_empty_dir(struct ksmbd_file *fp)
|
|||||||
readdir_data.dirent_count = 0;
|
readdir_data.dirent_count = 0;
|
||||||
|
|
||||||
err = iterate_dir(fp->filp, &readdir_data.ctx);
|
err = iterate_dir(fp->filp, &readdir_data.ctx);
|
||||||
if (readdir_data.dirent_count > 2)
|
if (readdir_data.dirent_count)
|
||||||
err = -ENOTEMPTY;
|
err = -ENOTEMPTY;
|
||||||
else
|
else
|
||||||
err = 0;
|
err = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user