Now that we're passing down a kernel buffer with enough space to account
for an extra NULL terminator, go ahead and use scnprintf() to print out
a long in proc_put_long().  count here includes NULL terminator slot in
the buffer, so we will get the correct behavior we're looking for.

Signed-off-by: Josef Bacik <[email protected]>
---
 kernel/sysctl.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 287862f91717..d8cc8737f58f 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -484,6 +484,7 @@ static int proc_get_long(char **buf, size_t *size,
 
        return 0;
 }
+#undef TMPBUFLEN
 
 /**
  * proc_put_long - converts an integer to a decimal ASCII formatted string
@@ -498,18 +499,12 @@ static int proc_get_long(char **buf, size_t *size,
  */
 static void proc_put_long(void **buf, size_t *size, unsigned long val, bool 
neg)
 {
-       int len;
-       char tmp[TMPBUFLEN], *p = tmp;
+       size_t ret;
 
-       sprintf(p, "%s%lu", neg ? "-" : "", val);
-       len = strlen(tmp);
-       if (len > *size)
-               len = *size;
-       memcpy(*buf, tmp, len);
-       *size -= len;
-       *buf += len;
+       ret = scnprintf(*buf, *size, "%s%lu", neg ? "-" : "", val);
+       *size -= ret;
+       *buf += ret;
 }
-#undef TMPBUFLEN
 
 static void proc_put_char(void **buf, size_t *size, char c)
 {
-- 
2.24.1

Reply via email to