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