The "%5lu" part of the sprintf only guarantees a minimum length,
not a maximum one. This patch should make it correct for any
possible timestamp.

Signed-off-by: Sylvain Munaut <s.mun...@whatever-company.com>
---
 kernel/printk.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/kernel/printk.c b/kernel/printk.c
index 66a2ea3..2ceceea 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -847,8 +847,17 @@ static size_t print_time(u64 ts, char *buf)
        if (!printk_time)
                return 0;
 
-       if (!buf)
-               return 15;
+       if (!buf) {
+               size_t len = 15;
+               u64 ts_limit = (u64)100000 * (u64)1000000000;
+
+               while ((ts > ts_limit) && (len < 21)) {
+                       len++;
+                       ts_limit = 10 * ts_limit;
+               }
+
+               return len;
+       }
 
        rem_nsec = do_div(ts, 1000000000);
        return sprintf(buf, "[%5lu.%06lu] ",
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to