From 9d342a81973ec49a072d49bc2b991e0a851443a8 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Sat, 10 Feb 2007 01:46:38 -0800 Subject: [PATCH] --- yaml --- r: 47625 b: refs/heads/master c: 8d06087714b78e8921bd30b5c64202fe80c47339 h: refs/heads/master i: 47623: 2158a616e6ee2b483bacaa53e6a5e12f41bc002c v: v3 --- [refs] | 2 +- trunk/kernel/sysctl.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 77d6e8d8edbc..8699800165c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c75fb88dbcc470e6041a20b1457b4835b9a0a48a +refs/heads/master: 8d06087714b78e8921bd30b5c64202fe80c47339 diff --git a/trunk/kernel/sysctl.c b/trunk/kernel/sysctl.c index 84cab0ce44d9..e0ac6cd79fcf 100644 --- a/trunk/kernel/sysctl.c +++ b/trunk/kernel/sysctl.c @@ -1686,13 +1686,12 @@ static int _proc_do_string(void* data, int maxlen, int write, size_t len; char __user *p; char c; - - if (!data || !maxlen || !*lenp || - (*ppos && !write)) { + + if (!data || !maxlen || !*lenp) { *lenp = 0; return 0; } - + if (write) { len = 0; p = buffer; @@ -1713,6 +1712,15 @@ static int _proc_do_string(void* data, int maxlen, int write, len = strlen(data); if (len > maxlen) len = maxlen; + + if (*ppos > len) { + *lenp = 0; + return 0; + } + + data += *ppos; + len -= *ppos; + if (len > *lenp) len = *lenp; if (len)