From: Jason Gunthorpe Date: Mon, 17 Dec 2012 23:59:58 +0000 (-0800) Subject: lib/vsprintf.c: fix handling of %zd when using ssize_t X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=ef12496022d5917cfe0b04cf8fd685fc6bc08400;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git lib/vsprintf.c: fix handling of %zd when using ssize_t Documentation/printk-formats.txt says to use %zd for a ssize_t argument and some drivers do. Unfortunately this prints a positive number for negative values eg: tpm_tis 70030000.tpm_tis: tpm_transmit: tpm_send: error 4294967234 Add a case to va_args a ssize_t type if the interpretation should be signed. Tested on PPC32. Signed-off-by: Jason Gunthorpe Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 39c99fea7c03..41da0741a663 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -1485,7 +1485,10 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) num = va_arg(args, long); break; case FORMAT_TYPE_SIZE_T: - num = va_arg(args, size_t); + if (spec.flags & SIGN) + num = va_arg(args, ssize_t); + else + num = va_arg(args, size_t); break; case FORMAT_TYPE_PTRDIFF: num = va_arg(args, ptrdiff_t);