On Sun, Nov 11, 2018 at 11:36 PM Richard Guy Briggs <rgb(a)redhat.com> wrote:
On 2018-11-11 17:24, Ondrej Mosnacek wrote:
> Hi Richard,
> On Fri, Nov 9, 2018 at 11:04 PM Richard Guy Briggs <rgb(a)redhat.com> wrote:
> > Hi Paul, Ondrej,
> >
> > I've got a couple of patches with two different approaches to address
> > ghak100:
> >
https://github.com/linux-audit/audit-kernel/issues/100
> >
> > The patches work, but I've not posted them yet because I wanted to
> > update the audit-testsuite first to consistently test it.
> >
> > I've written a test to automate the regression test to add to
> > audit-testsuite based on the reproducer recipe provided in ghak100. The
> > procedure in the description of ghak100 works, but I'm having some
> > trouble with the script. In particular, it is hanging the script on the
> > "kill 'SIGSTOP' $pid_fuse" line. Once it hangs, the main
script, the
> > test subscript and both backgrounded processes (fuse and umount) are
> > still hanging around.
> >
> > Here's the script:
> >
https://github.com/linux-audit/audit-testsuite/compare/master...rgbriggs:...
> >
> > Do either of you have any insight why this might be happenning and how
> > to fix or work around it?
> >
> > A couple of minor notes:
> > - The $pid_fuse += 1 is necessary since it forks from the PID reported
> > to the shell.
>
> I don't understand... why do you expect the forked PID to be exactly
> one higher? This doesn't seem to be the case in general:
>
> $ (echo $$; exec bash -c 'echo $$' &)
> 10995
> 13693
I was not happy with this hack, but this was the most expedient way to
try to get a first attempt working... I suppose a better way might be
to spawn the client which forks, then use something like pgrep to find
all the instances and eliminate the PID that was returned by the launch.
How about something like:
system("cd $basedir/$clientdir; mkfifo /tmp/fifo; sh -c 'echo $$ >
/tmp/fifo; exec ./$client -f -s $tmpdir' & cat /tmp/fifo");
That should always give you the right PID. You just need to tweak it
to create the FIFO as a temporary file and clean it up afterwards. It
is more complicated, but should be reliable.
As far as I can tell, I was hitting the right task since hitting the
wrong or non-existant task didn't hang the test.
Yes, when I fork from a fresh shell, I also get the forked PID one
greater practically every time, so that will be a different problem...
I didn't look at the hang problem yet, I will try it later in the
afternoon.
> > - The SIGSTOP is necessary to simulate the hung filesystem.
> >
> > - RGB
>
> Ondrej Mosnacek <omosnace at redhat dot com>
- RGB
--
Richard Guy Briggs <rgb(a)redhat.com>
Sr. S/W Engineer, Kernel Security, Base Operating Systems
Remote, Ottawa, Red Hat Canada
IRC: rgb, SunRaycer
Voice: +1.647.777.2635, Internal: (81) 32635
--
Ondrej Mosnacek <omosnace at redhat dot com>
Associate Software Engineer, Security Technologies
Red Hat, Inc.