AUDIT: Fix abuse of va_args.
[linux-3.10.git] / kernel / audit.c
index 1dd456c90ae5849b6dd894db3e9f4e39e8962c28..ddb69a4582037864797d287a4a1eadc9dfe49ac3 100644 (file)
@@ -708,6 +708,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
 {
        int len, avail;
        struct sk_buff *skb;
+       va_list args2;
 
        if (!ab)
                return;
@@ -720,6 +721,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
                if (!avail)
                        goto out;
        }
+       va_copy(args2, args);
        len = vsnprintf(skb->tail, avail, fmt, args);
        if (len >= avail) {
                /* The printk buffer is 1024 bytes long, so if we get
@@ -728,7 +730,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
                avail = audit_expand(ab, 1+len-avail);
                if (!avail)
                        goto out;
-               len = vsnprintf(skb->tail, avail, fmt, args);
+               len = vsnprintf(skb->tail, avail, fmt, args2);
        }
        skb_put(skb, (len < avail) ? len : avail);
 out: