You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
selinux: optimize selinux_inode_getattr/permission() based on neveraudit|permissive
Extend the task avdcache to also cache whether the task SID is both
permissive and neveraudit, and return immediately if so in both
selinux_inode_getattr() and selinux_inode_permission().
The same approach could be applied to many of the hook functions
although the avdcache would need to be updated for more than directory
search checks in order for this optimization to be beneficial for checks
on objects other than directories.
To test, apply SELinuxProject/selinux#473 to
your selinux userspace, build and install libsepol and secilc, and use
the following CIL policy module:
$ cat neverauditpermissive.cil
(typeneveraudit unconfined_t)
(typepermissive unconfined_t)
Before inserting this CIL module, perf record make -j16 of an
already built allmodconfig kernel tree yields the following:
1.65% [k] __d_lookup_rcu
0.53% [k] selinux_inode_permission
0.40% [k] selinux_inode_getattr
0.20% [k] security_inode_getattr
0.15% [k] avc_lookup
0.10% [k] security_inode_permission
0.05% [k] avc_has_perm
0.02% [k] avc_policy_seqno
After inserting this CIL module via semodule -i neverauditpermissive.cil,
the same perf command yields the following:
1.74% [k] __d_lookup_rcu
0.31% [k] selinux_inode_permission
0.23% [k] security_inode_getattr
0.07% [k] security_inode_permission
0.03% [k] avc_policy_seqno
0.03% [k] selinux_inode_getattr
0.01% [k] avc_lookup
0.00% [k] avc_has_perm
Note that the symbols are listed from highest overhead to lowest in
both cases, not in the same order.
Signed-off-by: Stephen Smalley <[email protected]>
0 commit comments