audit: Send netlink ACK before setting connection in auditd_set
authorChris Riches <chris.riches@nutanix.com>
Wed, 18 Oct 2023 09:23:51 +0000 (09:23 +0000)
committerPaul Moore <paul@paul-moore.com>
Mon, 13 Nov 2023 03:33:49 +0000 (22:33 -0500)
commit022732e3d846e197539712e51ecada90ded0572a
treeca53cdb433928bbe1a777c03092c3f45cec9c9a3
parentb85ea95d086471afb4ad062012a4d73cd328fa86
audit: Send netlink ACK before setting connection in auditd_set

When auditd_set sets the auditd_conn pointer, audit messages can
immediately be put on the socket by other kernel threads. If the backlog
is large or the rate is high, this can immediately fill the socket
buffer. If the audit daemon requested an ACK for this operation, a full
socket buffer causes the ACK to get dropped, also setting ENOBUFS on the
socket.

To avoid this race and ensure ACKs get through, fast-track the ACK in
this specific case to ensure it is sent before auditd_conn is set.

Signed-off-by: Chris Riches <chris.riches@nutanix.com>
[PM: fix some tab vs space damage]
Signed-off-by: Paul Moore <paul@paul-moore.com>
kernel/audit.c