• E
    Audit: stop deadlock from signals under load · f09ac9db
    Eric Paris 提交于
    A deadlock is possible between kauditd and auditd under load if auditd
    receives a signal.  When auditd receives a signal it sends a netlink
    message to the kernel asking for information about the sender of the
    signal.  In that same context the audit system will attempt to send a
    netlink message back to the userspace auditd.  If kauditd has already
    filled the socket buffer (see netlink_attachskb()) auditd will now put
    itself to sleep waiting for room to send the message.  Since auditd is
    responsible for draining that socket we have a deadlock.  The fix, since
    the response from the kernel does not need to be synchronous is to send
    the signal information back to auditd in a separate thread.  And thus
    auditd can continue to drain the audit queue normally.
    Signed-off-by: NEric Paris <eparis@redhat.com>
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    f09ac9db
audit.c 39.4 KB