Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a77cfcb4 authored by Al Viro's avatar Al Viro
Browse files

fix off-by-one in argument passed by iterate_fd() to callbacks



Noticed by Pavel Roskin; the thing in his patch I disagree with
was compensating for that shite in callbacks instead of fixing
it once in the iterator itself.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 21d8a15a
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -994,16 +994,18 @@ int iterate_fd(struct files_struct *files, unsigned n,
		const void *p)
{
	struct fdtable *fdt;
	struct file *file;
	int res = 0;
	if (!files)
		return 0;
	spin_lock(&files->file_lock);
	fdt = files_fdtable(files);
	while (!res && n < fdt->max_fds) {
		file = rcu_dereference_check_fdtable(files, fdt->fd[n++]);
		if (file)
	for (fdt = files_fdtable(files); n < fdt->max_fds; n++) {
		struct file *file;
		file = rcu_dereference_check_fdtable(files, fdt->fd[n]);
		if (!file)
			continue;
		res = f(p, file, n);
		if (res)
			break;
	}
	spin_unlock(&files->file_lock);
	return res;