mirror of https://gitee.com/openkylin/linux.git
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: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f32356261d
commit
74983ac20a
|
@ -204,9 +204,23 @@ int fs_parse(struct fs_context *fc,
|
||||||
goto okay;
|
goto okay;
|
||||||
|
|
||||||
case fs_param_is_fd: {
|
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;
|
||||||
|
|
||||||
|
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;
|
goto bad_value;
|
||||||
goto okay;
|
}
|
||||||
|
|
||||||
|
if (result->uint_32 > INT_MAX)
|
||||||
|
goto bad_value;
|
||||||
|
goto maybe_okay;
|
||||||
}
|
}
|
||||||
|
|
||||||
case fs_param_is_blockdev:
|
case fs_param_is_blockdev:
|
||||||
|
|
Loading…
Reference in New Issue