Messages in this thread Patch in this message | | | From | "J. R. Okajima" <> | Subject | proc_dointvec() and write | Date | Mon, 24 May 2010 23:32:19 +0900 |
| |
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. Is this intended change? If not, how about this patch?
J. R. Okajima
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 4c93486..5058e12 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2262,6 +2272,8 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, if (write) { left -= proc_skip_spaces(&kbuf); + if (!left) + break; err = proc_get_long(&kbuf, &left, &lval, &neg, proc_wspace_sep, sizeof(proc_wspace_sep), NULL); @@ -2288,7 +2306,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, if (!write && !first && left && !err) err = proc_put_char(&buffer, &left, '\n'); - if (write && !err) + if (write && !err && left) left -= proc_skip_spaces(&kbuf); free: if (write) {
| |