提交 eecb0a73 编写于 作者: D David Woodhouse

AUDIT: Fix abuse of va_args.

We're not allowed to use args twice; we need to use va_copy.
Signed-off-by: NDavid Woodhouse <dwmw2@infradead.org>
上级 e3b926b4
...@@ -708,6 +708,7 @@ static void audit_log_vformat(struct audit_buffer *ab, const char *fmt, ...@@ -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, ...@@ -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, ...@@ -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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册