On Tue, 2022-06-28 at 08:25 +0800, Ian Kent wrote: > The valid values of nfs options port and mountport are 0 to > USHRT_MAX. > > The fs parser will return a fail for port values that are negative > and the sloppy option handling then returns success. > > But the sloppy option handling is meant to return success for invalid > options not valid options with invalid values. > > Parsing these values as s32 rather than u32 prevents the parser from > returning a parse fail allowing the later USHRT_MAX option check to > correctly return a fail in this case. The result check could be > changed > to use the int_32 union variant as well but leaving it as a uint_32 > check avoids using two logical compares instead of one. > > Signed-off-by: Ian Kent <raven@xxxxxxxxxx> > --- > fs/nfs/fs_context.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c > index 9a16897e8dc6..f4da1d2be616 100644 > --- a/fs/nfs/fs_context.c > +++ b/fs/nfs/fs_context.c > @@ -156,14 +156,14 @@ static const struct fs_parameter_spec > nfs_fs_parameters[] = { > fsparam_u32 ("minorversion", Opt_minorversion), > fsparam_string("mountaddr", Opt_mountaddr), > fsparam_string("mounthost", Opt_mounthost), > - fsparam_u32 ("mountport", Opt_mountport), > + fsparam_s32 ("mountport", Opt_mountport), > fsparam_string("mountproto", Opt_mountproto), > fsparam_u32 ("mountvers", Opt_mountvers), > fsparam_u32 ("namlen", Opt_namelen), > fsparam_u32 ("nconnect", Opt_nconnect), > fsparam_u32 ("max_connect", Opt_max_connect), > fsparam_string("nfsvers", Opt_vers), > - fsparam_u32 ("port", Opt_port), > + fsparam_s32 ("port", Opt_port), > fsparam_flag_no("posix", Opt_posix), > fsparam_string("proto", Opt_proto), > fsparam_flag_no("rdirplus", Opt_rdirplus), > > Why don't we just check for the ENOPARAM return value from fs_parse()? -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx