diff options
author | Satoru Moriya <satoru.moriya@hds.com> | 2011-05-26 19:38:04 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-07-24 22:06:03 +0930 |
commit | 81c7413650fbbf881bcb9e567be61a6717eb1876 (patch) | |
tree | 4e09dc38195e016c983f1aa9430ace78487cb178 | |
parent | 6d6be43d4dfdb167ef72f4aa665c1607db799be4 (diff) | |
download | op-kernel-dev-81c7413650fbbf881bcb9e567be61a6717eb1876.zip op-kernel-dev-81c7413650fbbf881bcb9e567be61a6717eb1876.tar.gz |
param: fix return value handling in param_set_*
In STANDARD_PARAM_DEF, param_set_* handles the case in which strtolfn
returns -EINVAL but it may return -ERANGE. If it returns -ERANGE,
param_set_* may set uninitialized value to the paramerter. We should handle
both cases.
The one of the cases in which strtolfn() returns -ERANGE is following:
*Type of module parameter is long
*Set the parameter more than LONG_MAX
Signed-off-by: Satoru Moriya <satoru.moriya@hds.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r-- | kernel/params.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/params.c b/kernel/params.c index ed72e13..2a4ba25 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -225,8 +225,8 @@ int parse_args(const char *name, int ret; \ \ ret = strtolfn(val, 0, &l); \ - if (ret == -EINVAL || ((type)l != l)) \ - return -EINVAL; \ + if (ret < 0 || ((type)l != l)) \ + return ret < 0 ? ret : -EINVAL; \ *((type *)kp->arg) = l; \ return 0; \ } \ |