Message ID | 20200813210411.905010-5-josef@toxicpanda.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Some buffer management fixes for proc | expand |
On Thu, Aug 13, 2020 at 05:04:09PM -0400, Josef Bacik wrote: > 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@toxicpanda.com> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
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) {
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@toxicpanda.com> --- kernel/sysctl.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)