diff --git a/kernel/audit.c b/kernel/audit.c
index b86007da8a3fd09931a17caa014c2aace8439fe8..2ddd1a2b66d091ea31dd8e60cf717e62a352e520 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -488,7 +488,7 @@ static inline int audit_log_drain(struct audit_buffer *ab)
 
 		if (audit_pid) {
 			struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data;
-			nlh->nlmsg_len = skb->len;
+			nlh->nlmsg_len = skb->len - sizeof(*nlh);
 			skb_get(skb); /* because netlink_* frees */
 			retval = netlink_unicast(audit_sock, skb, audit_pid,
 						 MSG_DONTWAIT);