diff --git a/kernel/audit.c b/kernel/audit.c
index c5e034fe14bbb67e1d7ffd43071f21a4a2e806b0..3de5ebb94559216d43908ac0cc5a0c3c7cfb9a01 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -740,6 +740,8 @@ static int kauditd_send_queue(struct sock *sk, u32 portid,
 		if (!sk) {
 			if (err_hook)
 				(*err_hook)(skb);
+			if (queue == &audit_hold_queue)
+				goto out;
 			continue;
 		}
 
@@ -756,6 +758,8 @@ static int kauditd_send_queue(struct sock *sk, u32 portid,
 					(*err_hook)(skb);
 				if (rc == -EAGAIN)
 					rc = 0;
+				if (queue == &audit_hold_queue)
+					goto out;
 				/* continue to drain the queue */
 				continue;
 			} else
@@ -767,6 +771,7 @@ static int kauditd_send_queue(struct sock *sk, u32 portid,
 		}
 	}
 
+out:
 	return (rc >= 0 ? 0 : rc);
 }