aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sysctl.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 84cab0ce44d9..e0ac6cd79fcf 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1686,13 +1686,12 @@ static int _proc_do_string(void* data, int maxlen, int write,
1686 size_t len; 1686 size_t len;
1687 char __user *p; 1687 char __user *p;
1688 char c; 1688 char c;
1689 1689
1690 if (!data || !maxlen || !*lenp || 1690 if (!data || !maxlen || !*lenp) {
1691 (*ppos && !write)) {
1692 *lenp = 0; 1691 *lenp = 0;
1693 return 0; 1692 return 0;
1694 } 1693 }
1695 1694
1696 if (write) { 1695 if (write) {
1697 len = 0; 1696 len = 0;
1698 p = buffer; 1697 p = buffer;
@@ -1713,6 +1712,15 @@ static int _proc_do_string(void* data, int maxlen, int write,
1713 len = strlen(data); 1712 len = strlen(data);
1714 if (len > maxlen) 1713 if (len > maxlen)
1715 len = maxlen; 1714 len = maxlen;
1715
1716 if (*ppos > len) {
1717 *lenp = 0;
1718 return 0;
1719 }
1720
1721 data += *ppos;
1722 len -= *ppos;
1723
1716 if (len > *lenp) 1724 if (len > *lenp)
1717 len = *lenp; 1725 len = *lenp;
1718 if (len) 1726 if (len)