Commit 74983ac2 authored by David Howells's avatar David Howells Committed by Al Viro
Browse files

vfs: Make fs_parse() handle fs_param_is_fd-type params better



Make fs_parse() handle fs_param_is_fd-type parameters that are passed a
string by converting it to an integer (in addition to handling direct fd
specification).

Also range check the integer.

[fix from  Yin Fengwei folded]

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f3235626
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -204,9 +204,23 @@ int fs_parse(struct fs_context *fc,
		goto okay;

	case fs_param_is_fd: {
		if (param->type != fs_value_is_file)
		switch (param->type) {
		case fs_value_is_string:
			if (!result->has_value)
				goto bad_value;
		goto okay;

			ret = kstrtouint(param->string, 0, &result->uint_32);
			break;
		case fs_value_is_file:
			result->uint_32 = param->dirfd;
			ret = 0;
		default:
			goto bad_value;
		}

		if (result->uint_32 > INT_MAX)
			goto bad_value;
		goto maybe_okay;
	}

	case fs_param_is_blockdev: