From 2c762de8303e441154a0c38c0cf78170b5d45013 Mon Sep 17 00:00:00 2001 From: "Ricardo M. Correia" Date: Tue, 20 Jul 2010 13:51:42 -0700 Subject: [PATCH] Fix buggy kmem_{v}asprintf() functions When the kvasprintf() call fails they should reset the arguments by calling va_start()/va_copy() and va_end() inside the loop, otherwise they'll try to read more arguments rather than starting over and reading them from the beginning. Signed-off-by: Ricardo M. Correia Signed-off-by: Brian Behlendorf --- module/spl/spl-kmem.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c index 100c602..e575b1e 100644 --- a/module/spl/spl-kmem.c +++ b/module/spl/spl-kmem.c @@ -245,11 +245,11 @@ kmem_vasprintf(const char *fmt, va_list ap) va_list aq; char *ptr; - va_copy(aq, ap); do { + va_copy(aq, ap); ptr = kvasprintf(GFP_KERNEL, fmt, aq); + va_end(aq); } while (ptr == NULL); - va_end(aq); return ptr; } @@ -261,11 +261,11 @@ kmem_asprintf(const char *fmt, ...) va_list ap; char *ptr; - va_start(ap, fmt); do { + va_start(ap, fmt); ptr = kvasprintf(GFP_KERNEL, fmt, ap); + va_end(ap); } while (ptr == NULL); - va_end(ap); return ptr; } -- 2.40.0