From: Paul Moore <paul@paul-moore.com>
To: Stanislav Kinsburskii <skinsburskii@gmail.com>,
Shuah Khan <shuah@kernel.org>, Eric Paris <eparis@redhat.com>,
Al Viro <viro@zeniv.linux.org.uk>,
Amy Griffis <amy.griffis@hp.com>
Cc: Stanislav Kinsburskii <skinsburskii@gmail.com>,
Frank Hofmann <hofmann@deshaw.com>,
Noah Orlando <orlandon@deshaw.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
audit@vger.kernel.org
Subject: Re: [PATCH 2/3] audit: Fix filter rule accounting after automatic removal
Date: Tue, 01 Sep 2026 17:35:14 -0400 [thread overview]
Message-ID: <1e277c072e35ee68419976510ed4cc7d@paul-moore.com> (raw)
In-Reply-To: <20260806-audit-v1-2-ddd0d94ff0b6@gmail.com>
On Aug 6, 2026 Stanislav Kinsburskii <skinsburskii@gmail.com> wrote:
>
> The audit_n_rules and audit_signals counters are incremented when filter
> rules are installed and decremented by the explicit rule deletion path.
> Rules can also disappear when a watch or tree is removed, or when an LSM
> rule cannot be reconstructed, but those paths do not update the counters.
>
> As a result, audit_n_rules can remain nonzero after the last applicable
> rule has gone away, causing subsequent syscalls to allocate non-dummy
> audit contexts unnecessarily. A stale audit_signals value similarly
> causes unnecessary signal auditing work.
>
> This can be reproduced for an inode watch with:
>
> mkdir /tmp/audit-n-rules-bench
> touch /tmp/audit-n-rules-bench/watched
> auditctl -w /tmp/audit-n-rules-bench/watched -p r \
> -k audit_n_rules_bench
> rm /tmp/audit-n-rules-bench/watched
> rmdir /tmp/audit-n-rules-bench
>
> The rm updates the watch after its inode disappears, and the rmdir causes
> audit_remove_parent_watches() to remove the rule. For an audit tree, the
> kill_rules() path can be reproduced with:
>
> mkdir /tmp/audit-kill-rules
> auditctl -a always,exit -F arch=b64 \
> -F dir=/tmp/audit-kill-rules -F perm=r \
> -k audit_kill_rules_test
> rmdir /tmp/audit-kill-rules
>
> In both cases, auditctl -l reports no rules after the directory is
> removed. Run the following before installing the rule and again after it
> has disappeared:
>
> audit_bench --iterations 10000000 --repetitions 10
>
> For the inode watch, the same VM produced:
>
> no rules:
> median=38 mean=39 stddev=4 (10%) range=38..53 ns/op
> automatically removed, before this fix:
> median=55 mean=56 stddev=3 (5%) range=55..65 ns/op
> automatically removed, with this fix:
> median=38 mean=39 stddev=4 (10%) range=38..52 ns/op
>
> For the audit tree, it produced:
>
> no rules:
> median=38 mean=39 stddev=4 (9%) range=38..52 ns/op
> automatically removed, before this fix:
> median=59 mean=60 stddev=2 (3%) range=59..67 ns/op
> automatically removed, with this fix:
> median=38 mean=39 stddev=4 (9%) range=38..52 ns/op
>
> Reboot between the unpatched and patched tests because an already stale
> counter cannot be repaired by deleting rules which are no longer present.
>
> Factor the existing counter updates into common rule insertion and removal
> helpers and call the removal helper from every automatic removal path. All
> of these updates remain serialized by audit_filter_mutex.
>
> Fixes: 471a5c7c8391 ("[PATCH] introduce audit rules counter")
> Fixes: e54dc2431d74 ("[PATCH] audit signal recipients")
> Signed-off-by: Stanislav Kinsburskii <skinsburskii@gmail.com>
> ---
> kernel/audit.h | 5 +++
> kernel/audit_tree.c | 1 +
> kernel/audit_watch.c | 2 ++
> kernel/auditfilter.c | 86 +++++++++++++++++++++++++---------------------------
> 4 files changed, 50 insertions(+), 44 deletions(-)
This looks good to me. I'm going to merge this into audit/dev, but I'm
going to drop the "audit_bench" references from the commit description as
I don't think we want that tool in the kernel sources right now.
Thanks Stanislav, both for finding the bug and providing a clean, elegant
fix.
--
paul-moore.com
next prev parent reply other threads:[~2026-09-01 21:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 1:01 [PATCH 0/3] audit: Measure and reduce syscall filtering overhead Stanislav Kinsburskii
2026-08-07 1:01 ` [PATCH 1/3] selftests/audit: Add syscall overhead benchmark Stanislav Kinsburskii
2026-09-01 21:35 ` Paul Moore
2026-08-07 1:01 ` [PATCH 2/3] audit: Fix filter rule accounting after automatic removal Stanislav Kinsburskii
2026-09-01 21:35 ` Paul Moore [this message]
2026-08-07 1:01 ` [PATCH 3/3] audit: Skip exit filtering for syscalls without rules Stanislav Kinsburskii
2026-09-01 21:35 ` Paul Moore
2026-08-23 18:10 ` [PATCH 0/3] audit: Measure and reduce syscall filtering overhead Stanislav Kinsburskii
2026-08-25 1:56 ` Paul Moore
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=1e277c072e35ee68419976510ed4cc7d@paul-moore.com \
--to=paul@paul-moore.com \
--cc=amy.griffis@hp.com \
--cc=audit@vger.kernel.org \
--cc=eparis@redhat.com \
--cc=hofmann@deshaw.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=orlandon@deshaw.com \
--cc=shuah@kernel.org \
--cc=skinsburskii@gmail.com \
--cc=viro@zeniv.linux.org.uk \
/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