]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
tests/sys/audit: Avoid race caused by starting auditd(8) for testing
authorAlex Richardson <arichardson@FreeBSD.org>
Thu, 18 Feb 2021 10:14:27 +0000 (10:14 +0000)
committerAlex Richardson <arichardson@FreeBSD.org>
Wed, 17 Mar 2021 22:22:48 +0000 (22:22 +0000)
commiteb52de783a1c079b2ef4d674090322886cc22fc0
tree6f11a04ed0d7f85fbd88a9cb021712fba7df72c7
parent703419774f86525a2441d615733993a6fddcd047
tests/sys/audit: Avoid race caused by starting auditd(8) for testing

In the CheriBSD CI we reproducibly see the first test in sys/audit
(administrative:acct_failure) fail due to a missing startup message.
It appears this is caused by a race condition when starting auditd:
`service auditd onestart` returns as soon as the initial auditd() parent
exits (after the daemon(3) call).
We can avoid this problem by setting up the auditd infrastructure
in-process: libauditd contains audit_quick_{start,stop}() functions that
look like they are ideally suited to this task.
This patch also avoids forking lots of shell processes for each of the 418
tests by using `auditon(A_SENDTRIGGER, &trigger, sizeof(trigger))` to check
for a running auditd(8) instead of using `service auditd onestatus`.

With these two changes (and D28388 to fix the XFAIL'd test) I can now
boot and run `cd /usr/tests/sys/audit && kyua test` without any failures
in a single-core QEMU instance. Before there would always be at least one
failed test.

Besides making the tests more reliable in CI, a nice side-effect of this
change is that it also significantly speeds up running them by avoiding
lots of fork()/execve() caused by shell scripts:
Running kyua test on an AArch64 QEMU took 315s before and now takes 68s,
so it's roughly 3.5 times faster. This effect is even larger when running
on a CHERI-RISC-V QEMU since emulating CHERI instructions on an x86 host
is noticeably slower than emulating AArch64.

Test Plan: aarch64+amd64 QEMU no longer fail.

Reviewed By: asomers
Differential Revision: https://reviews.freebsd.org/D28451

(cherry picked from commit df093aa9463b2121d8307fb91c4ba7cf17f4ea64)
tests/sys/audit/Makefile
tests/sys/audit/administrative.c
tests/sys/audit/utils.c