Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eecb0a73 authored by David Woodhouse's avatar David Woodhouse
Browse files

AUDIT: Fix abuse of va_args.



We're not allowed to use args twice; we need to use va_copy.

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent e3b926b4
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -708,6 +708,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
{
{
	int len, avail;
	int len, avail;
	struct sk_buff *skb;
	struct sk_buff *skb;
	va_list args2;


	if (!ab)
	if (!ab)
		return;
		return;
@@ -720,6 +721,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
		if (!avail)
		if (!avail)
			goto out;
			goto out;
	}
	}
	va_copy(args2, args);
	len = vsnprintf(skb->tail, avail, fmt, args);
	len = vsnprintf(skb->tail, avail, fmt, args);
	if (len >= avail) {
	if (len >= avail) {
		/* The printk buffer is 1024 bytes long, so if we get
		/* 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);
		avail = audit_expand(ab, 1+len-avail);
		if (!avail)
		if (!avail)
			goto out;
			goto out;
		len = vsnprintf(skb->tail, avail, fmt, args);
		len = vsnprintf(skb->tail, avail, fmt, args2);
	}
	}
	skb_put(skb, (len < avail) ? len : avail);
	skb_put(skb, (len < avail) ? len : avail);
out:
out: