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>
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;
}
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;
}