linux-audit.redhat.com archive mirror
 help / color / mirror / Atom feed
From: Steve Grubb <sgrubb@redhat.com>
To: "Bhagwat, Shriniketan Manjunath" <shriniketan.bhagwat@hpe.com>
Cc: "linux-audit@redhat.com" <linux-audit@redhat.com>
Subject: Re: Auditd reconfigure using SIGHUP
Date: Fri, 06 Jan 2017 11:44:21 -0500	[thread overview]
Message-ID: <2504845.tOagdOxZuC@x2> (raw)
In-Reply-To: <CS1PR84MB02935314BC2054783FAD571DFA630@CS1PR84MB0293.NAMPRD84.PROD.OUTLOOK.COM>

Hello,

On Friday, January 6, 2017 6:29:59 AM EST Bhagwat, Shriniketan Manjunath 
wrote:
> In my last email I missed mentioning the fix that I have implemented.
> 
> Issue 1) As you said, I have fixed it  by replacing the ev_signal by
> ev_child as below.
> 
> struct ev_child sigchld_watcher;
> 
>         ev_child_init (&sigchld_watcher, child_handler, 0, 0);
>         ev_child_start (EV_DEFAULT_ &sigchld_watcher);
> 
> static void child_handler(EV_P_ ev_child *w, int revents)
> {
>         int pid;
> 
>         if (w->rpid == dispatcher_pid()) {
>                        dispatcher_reaped();
>         }
> }

I tried this as a first step yesterday but what happens is the problem gets 
worse. It thinks the dispatcher is running all the time and never tries to 
restart it.
 
> Issue 2) In auditd.c main(), child_handler is registered not immediately
> after init_dispatcher() is called. I have modified the audit to register
> ev_child immediately after init_dispatcher() as below. Or maybe before
> calling init_dispatcher(). This fixed issue 2 for me. Below extract is from
> documentation of libev for ev_child: " It is permissible to install a child
> watcher after the child has been forked (which implies it might have
> already exited), as long as the event loop isn't entered (or is continued
> from a watcher), i.e., forking and then immediately registering a watcher
> for the child is fine, but forking and registering a watcher a few event
> loop iterations later or in the next callback invocation is not."
> 
>         if (init_dispatcher(&config)) {
>                 if (pidfile)
>                         unlink(pidfile);
>                 tell_parent(FAILURE);
>                 return 1;
>         }
>         ev_child_init (&sigchld_watcher, child_handler, 0, 0);
>         ev_child_start (EV_DEFAULT_ &sigchld_watcher);
> 
> Issue 3) With the above fix for issue 2, I did not see the issue 3 getting
> occurred for me. This could be because shutdown_dispatcher() is called from
> dispatcher_reaped() where the status on the pipe is not checked.

Using the above code I still see the descriptor getting stepped on by 
something. I have added some debug info to audispd in svn which makes the 
problem more clear.

Jan  6 11:43:13 audispd: Failed setting up input(Bad file descriptor, -1), 
exiting

In case anyone else wishes to have a regression test, here's some code:

#!/bin/sh

while [ 1 ]
do
        echo "disabling sedispatch"
        sed -i '/active/s/yes/no/' /etc/audisp/plugins.d/sedispatch.conf
        kill -HUP `pidof auditd`
        sleep 10
        pstree -p `pidof auditd`
        echo "enabling sedispatch"
        sed -i '/active/s/no/yes/' /etc/audisp/plugins.d/sedispatch.conf
        kill -HUP `pidof auditd`
        sleep 10
        pstree -p `pidof auditd`
done

Of course you might want to change the plugin that's being altered to 
something else.

-Steve
 

  reply	other threads:[~2017-01-06 16:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-05 11:04 Auditd reconfigure using SIGHUP Bhagwat, Shriniketan Manjunath
2017-01-05 22:42 ` Steve Grubb
2017-01-06  6:29   ` Bhagwat, Shriniketan Manjunath
2017-01-06 16:44     ` Steve Grubb [this message]
2017-01-08 19:08       ` Steve Grubb
2017-01-09 13:30         ` Bhagwat, Shriniketan Manjunath
2017-01-09 14:04           ` Steve Grubb

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2504845.tOagdOxZuC@x2 \
    --to=sgrubb@redhat.com \
    --cc=linux-audit@redhat.com \
    --cc=shriniketan.bhagwat@hpe.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).