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;
|
||||
|
||||
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 okay;
|
||||
}
|
||||
|
||||
if (result->uint_32 > INT_MAX)
|
||||
goto bad_value;
|
||||
goto maybe_okay;
|
||||
}
|
||||
|
||||
case fs_param_is_blockdev:
|
||||
|
|
Loading…
Reference in New Issue