mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
audit/stable-6.8 PR 20240105
-----BEGIN PGP SIGNATURE----- iQJIBAABCAAyFiEES0KozwfymdVUl37v6iDy2pc3iXMFAmWYKJAUHHBhdWxAcGF1 bC1tb29yZS5jb20ACgkQ6iDy2pc3iXML3hAAyP/6RwJjUMM9Gsi9ZJNRz79X8uIp /MYONbzy1xKq/d78jZhjsJm9yIlLk3muVdd3oRcXdmahA5zs3jOKRaM+OfNLOrt6 nuNwS+yaMUYKsKNh/A8TLoxcmBuNAN6lubCKwbccR6hvugqrZuZFkAqCIkiWUDeb N64u1rL1q/tLI+jI76GIiK4SMMQihF3MMVVTmBWYDiIdrfPhFIHxipLgZaEBUqZM 43+2Y/blV75jcqPTZRgT9tk0LVLkiFtO97qUp9j+pYZbeoJ7CAaDH5A8NVm38yIX tyzYiTV2lGS3qf/HdLc3OpJQlBVkhbq6cRiLGvyiKQp60xiqYffoL7iFP4/DJMoT JKzoqXCixINRqdHWYbVY9hHBGg6R5c+1QqZzsnEy2MnBF++iLwJQAMz5JO9Qdh8F tD6fD82QzvfoNPuP0lBA67preqN3wiH1Zsv6cstoI/6QKCAMeTMZt/ywniBTKhX6 WMmhdmMQKTwGrnCosydAOonYesieiYPhxz6oSeRIqoHRHtNow8rjnFh7DR7yi8uc nv1x5bDqEI+QTrDys0cAq6fvdUZT2B9joqSovzXUGllRRS7w17WNf1Cu16jMTrHH FeZ2P1BvKE7YIFkqxcE/RY5NHX3ylxA4unFM8UgIheYiWbWLm5+xrwZdNL30KQJ4 4Hvvy3Buq6kb4HE= =908g -----END PGP SIGNATURE----- Merge tag 'audit-pr-20240105' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit Pull audit updates from Paul Moore: "The audit updates are fairly minor with only two patches: - Send an audit ACK to userspace immediately upon receiving an auditd registration event as opposed to waiting until the registration has been fully processed and the audit backlog starts filling the netlink buffers. Sending the ACK earlier, as done here, is still safe as the operation should not fail at the point when the ACK is done, and doing so helps avoid the ACK being dropped in extreme situations. - Update the audit MAINTAINERS entry with additional information. There isn't anything in this update that should be new to regular contributors or list subscribers, but I'm pushing to start documenting our processes, conventions, etc. and this seems like an important part of that" * tag 'audit-pr-20240105' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit: MAINTAINERS: update the audit entry audit: Send netlink ACK before setting connection in auditd_set
This commit is contained in:
commit
eab23bc8a8
@ -3339,13 +3339,17 @@ M: Eric Paris <eparis@redhat.com>
|
||||
L: audit@vger.kernel.org
|
||||
S: Supported
|
||||
W: https://github.com/linux-audit
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
|
||||
Q: https://patchwork.kernel.org/project/audit/list
|
||||
B: mailto:audit@vger.kernel.org
|
||||
P: https://github.com/linux-audit/audit-kernel/blob/main/README.md
|
||||
T: git https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
|
||||
F: include/asm-generic/audit_*.h
|
||||
F: include/linux/audit.h
|
||||
F: include/linux/audit_arch.h
|
||||
F: include/uapi/linux/audit.h
|
||||
F: kernel/audit*
|
||||
F: lib/*audit.c
|
||||
K: \baudit_[a-z_0-9]\+\b
|
||||
|
||||
AUXILIARY BUS DRIVER
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
@ -487,15 +487,19 @@ static void auditd_conn_free(struct rcu_head *rcu)
|
||||
* @pid: auditd PID
|
||||
* @portid: auditd netlink portid
|
||||
* @net: auditd network namespace pointer
|
||||
* @skb: the netlink command from the audit daemon
|
||||
* @ack: netlink ack flag, cleared if ack'd here
|
||||
*
|
||||
* Description:
|
||||
* This function will obtain and drop network namespace references as
|
||||
* necessary. Returns zero on success, negative values on failure.
|
||||
*/
|
||||
static int auditd_set(struct pid *pid, u32 portid, struct net *net)
|
||||
static int auditd_set(struct pid *pid, u32 portid, struct net *net,
|
||||
struct sk_buff *skb, bool *ack)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct auditd_connection *ac_old, *ac_new;
|
||||
struct nlmsghdr *nlh;
|
||||
|
||||
if (!pid || !net)
|
||||
return -EINVAL;
|
||||
@ -507,6 +511,13 @@ static int auditd_set(struct pid *pid, u32 portid, struct net *net)
|
||||
ac_new->portid = portid;
|
||||
ac_new->net = get_net(net);
|
||||
|
||||
/* send the ack now to avoid a race with the queue backlog */
|
||||
if (*ack) {
|
||||
nlh = nlmsg_hdr(skb);
|
||||
netlink_ack(skb, nlh, 0, NULL);
|
||||
*ack = false;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&auditd_conn_lock, flags);
|
||||
ac_old = rcu_dereference_protected(auditd_conn,
|
||||
lockdep_is_held(&auditd_conn_lock));
|
||||
@ -1200,7 +1211,8 @@ static int audit_replace(struct pid *pid)
|
||||
return auditd_send_unicast_skb(skb);
|
||||
}
|
||||
|
||||
static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
bool *ack)
|
||||
{
|
||||
u32 seq;
|
||||
void *data;
|
||||
@ -1293,7 +1305,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
/* register a new auditd connection */
|
||||
err = auditd_set(req_pid,
|
||||
NETLINK_CB(skb).portid,
|
||||
sock_net(NETLINK_CB(skb).sk));
|
||||
sock_net(NETLINK_CB(skb).sk),
|
||||
skb, ack);
|
||||
if (audit_enabled != AUDIT_OFF)
|
||||
audit_log_config_change("audit_pid",
|
||||
new_pid,
|
||||
@ -1538,9 +1551,10 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
* Parse the provided skb and deal with any messages that may be present,
|
||||
* malformed skbs are discarded.
|
||||
*/
|
||||
static void audit_receive(struct sk_buff *skb)
|
||||
static void audit_receive(struct sk_buff *skb)
|
||||
{
|
||||
struct nlmsghdr *nlh;
|
||||
bool ack;
|
||||
/*
|
||||
* len MUST be signed for nlmsg_next to be able to dec it below 0
|
||||
* if the nlmsg_len was not aligned
|
||||
@ -1553,9 +1567,12 @@ static void audit_receive(struct sk_buff *skb)
|
||||
|
||||
audit_ctl_lock();
|
||||
while (nlmsg_ok(nlh, len)) {
|
||||
err = audit_receive_msg(skb, nlh);
|
||||
/* if err or if this message says it wants a response */
|
||||
if (err || (nlh->nlmsg_flags & NLM_F_ACK))
|
||||
ack = nlh->nlmsg_flags & NLM_F_ACK;
|
||||
err = audit_receive_msg(skb, nlh, &ack);
|
||||
|
||||
/* send an ack if the user asked for one and audit_receive_msg
|
||||
* didn't already do it, or if there was an error. */
|
||||
if (ack || err)
|
||||
netlink_ack(skb, nlh, err, NULL);
|
||||
|
||||
nlh = nlmsg_next(nlh, &len);
|
||||
|
Loading…
Reference in New Issue
Block a user