aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ. R. Okajima <hooanon05@yahoo.co.jp>2010-05-25 19:10:14 -0400
committerDavid S. Miller <davem@davemloft.net>2010-05-25 19:10:14 -0400
commit563b04671017ea00ba563ebeebdc36bce79b1b60 (patch)
tree02d6ea1c9a3ae42b10f328aa0b51740677456793
parentdd7496f217462a23a9a8a15b9925866eaad76e22 (diff)
proc_dointvec: write a single value
The commit 00b7c3395aec3df43de5bd02a3c5a099ca51169f "sysctl: refactor integer handling proc code" modified the behaviour of writing to /proc. Before the commit, write("1\n") to /proc/sys/kernel/printk succeeded. But now it returns EINVAL. This commit supports writing a single value to a multi-valued entry. Signed-off-by: J. R. Okajima <hooanon05@yahoo.co.jp> Reviewed-and-tested-by: WANG Cong <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--kernel/sysctl.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index b12583047757..f948f20f09cb 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2253,6 +2253,8 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
2253 if (write) { 2253 if (write) {
2254 left -= proc_skip_spaces(&kbuf); 2254 left -= proc_skip_spaces(&kbuf);
2255 2255
2256 if (!left)
2257 break;
2256 err = proc_get_long(&kbuf, &left, &lval, &neg, 2258 err = proc_get_long(&kbuf, &left, &lval, &neg,
2257 proc_wspace_sep, 2259 proc_wspace_sep,
2258 sizeof(proc_wspace_sep), NULL); 2260 sizeof(proc_wspace_sep), NULL);
@@ -2279,7 +2281,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
2279 2281
2280 if (!write && !first && left && !err) 2282 if (!write && !first && left && !err)
2281 err = proc_put_char(&buffer, &left, '\n'); 2283 err = proc_put_char(&buffer, &left, '\n');
2282 if (write && !err) 2284 if (write && !err && left)
2283 left -= proc_skip_spaces(&kbuf); 2285 left -= proc_skip_spaces(&kbuf);
2284free: 2286free:
2285 if (write) { 2287 if (write) {