]> git.proxmox.com Git - mirror_spl-debian.git/commitdiff
Fix buggy kmem_{v}asprintf() functions
authorRicardo M. Correia <ricardo.correia@oracle.com>
Tue, 20 Jul 2010 20:51:42 +0000 (13:51 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 20 Jul 2010 20:51:46 +0000 (13:51 -0700)
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 <ricardo.correia@oracle.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
module/spl/spl-kmem.c

index 100c6023015ab9d656f80ef941a45f04961cf12c..e575b1ee97df79da1c7d8cb157019951898026c9 100644 (file)
@@ -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;
 }