Commit ca4974ca authored by Hobin Woo's avatar Hobin Woo Committed by Steve French
Browse files

ksmbd: make __dir_empty() compatible with POSIX



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: default avatarHobin Woo <hobin.woo@samsung.com>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent ee426bfb
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1115,9 +1115,10 @@ static bool __dir_empty(struct dir_context *ctx, const char *name, int namlen,
	struct ksmbd_readdir_data *buf;

	buf = container_of(ctx, struct ksmbd_readdir_data, ctx);
	if (!is_dot_dotdot(name, namlen))
		buf->dirent_count++;

	return buf->dirent_count <= 2;
	return !buf->dirent_count;
}

/**
@@ -1137,7 +1138,7 @@ int ksmbd_vfs_empty_dir(struct ksmbd_file *fp)
	readdir_data.dirent_count = 0;

	err = iterate_dir(fp->filp, &readdir_data.ctx);
	if (readdir_data.dirent_count > 2)
	if (readdir_data.dirent_count)
		err = -ENOTEMPTY;
	else
		err = 0;