• Richard Guy Briggs's avatar
    audit: stop an old auditd being starved out by a new auditd · 2d12d571
    Richard Guy Briggs authored
    BugLink: http://bugs.launchpad.net/bugs/1633404
    
    Nothing prevents a new auditd starting up and replacing a valid
    audit_pid when an old auditd is still running, effectively starving out
    the old auditd since audit_pid no longer points to the old valid
    auditd.
    
    If no message to auditd has been attempted since auditd died
    unnaturally or got killed, audit_pid will still indicate it is alive.
    There isn't an easy way to detect if an old auditd is still running on
    the existing audit_pid other than attempting to send a message to see
    if it fails.  An -ECONNREFUSED almost certainly means it disappeared
    and can be replaced.  Other errors are not so straightforward and may
    indicate transient problems that will resolve themselves and the old
    auditd will recover.  Yet others will likely need manual intervention
    for which a new auditd will not solve the problem.
    
    Send a new message type (AUDIT_REPLACE) to the old auditd containing a
    u32 with the PID of the new auditd.  If the audit replace message
    succeeds (or doesn't fail with certainty), fail to register the new
    auditd and return an error (-EEXIST).
    
    This is expected to make the patch preventing an old auditd orphaning a
    new auditd redundant.
    
    V3: Switch audit message type from 1000 to 1300 block.
    Signed-off-by: default avatarRichard Guy Briggs <rgb@redhat.com>
    Signed-off-by: default avatarPaul Moore <pmoore@redhat.com>
    (cherry picked from commit 133e1e5a)
    Signed-off-by: default avatarJoseph Salisbury <joseph.salisbury@canonical.com>
    Acked-by: default avatarSeth Forshee <seth.forshee@canonical.com>
    Acked-by: default avatarTim Gardner <tim.gardner@canonical.com>
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    2d12d571
audit.c 53.5 KB