[PATCH 4/6] sysctl: make proc_put_long() use scnprintf

From: Josef Bacik
Date: Thu Aug 13 2020 - 17:04:45 EST


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 <josef@xxxxxxxxxxxxxx>
---
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