Go to file
xunchang c00ed59281
libselinux: Ignore the stem when looking up all matches in file context
This is a follow up fix to the restorecon change in
commit 6ab5fbaabc84f7093b37c1afae855292e918090f This change has been
tested in android for a while.

The stem is a list of top level directory (without regex metachar)
covered in the file context. And it constructs from finding the
second '/' in the regex_string; and aims to speed up the lookup by
skipping unnecessary regex matches. More contexts in
https://lore.kernel.org/selinux/200309231522.25749.russell@coker.com.au/

However, this caused some issue when we try to find all the partial
matches for a root directory. For example, the path "/data" doesn't
have a stem while the regex "/data/misc/(/.*)?" has "/data" as the
stem. As a result, all the regex for the subdirs of /data will not
considered as a match for "/data". And the restorecon will wrongly
skip on top level "/data" when there's a context change to one of
subdir.

This CL always includes the stem when compiling the regex in all
circumstances. Also, it ignores the stem id check in the "match all"
case, while the behavior for the single match stays unchanged. I will
collect more data to find out if stem id check is still necessary at
all with the new restorecon logic.

Test: run restorecon on "/data"; change the context of one subdir and
run again, and the context is restored on that subdir; search the caller
of regex_match

Signed-off-by: Tianjie Xu <xunchang@google.com>
2019-07-27 10:39:24 +02:00
checkpolicy checkpolicy: add flag to enable policy optimization 2019-06-25 10:11:00 -04:00
dbus Update VERSIONs to 2.9 for release. 2019-03-15 11:32:30 +01:00
gui gui: Install .desktop files to /usr/share/applications by default 2019-03-18 22:06:40 +01:00
libselinux libselinux: Ignore the stem when looking up all matches in file context 2019-07-27 10:39:24 +02:00
libsemanage libsemanage: optionally optimize policy on rebuild 2019-06-25 10:11:00 -04:00
libsepol libsepol: include module.c internal header in module_to_cil.c 2019-06-26 08:39:14 +02:00
mcstrans mcstrans: Add reference to setools.conf man page in the daemon one 2019-07-18 09:51:43 -05:00
policycoreutils Trivial style improvements 2019-05-28 07:51:28 -04:00
python Update man pages translation by Olesya Gerasimenko 2019-05-28 07:50:34 -04:00
restorecond Add documentation key in systemd .service files 2019-07-18 09:51:43 -05:00
sandbox Update VERSIONs to 2.9 for release. 2019-03-15 11:32:30 +01:00
scripts Switch to python3 by default 2019-02-20 16:43:27 +01:00
secilc secilc: add flag to enable policy optimization 2019-06-25 10:11:00 -04:00
semodule-utils Update VERSIONs to 2.9 for release. 2019-03-15 11:32:30 +01:00
.gitignore restorecond: Add gitignore 2016-11-16 11:20:05 -05:00
.travis.yml scripts: introduce env_use_destdir.sh helper 2019-01-21 12:13:41 +01:00
CleanSpec.mk Add empty top level Android.mk / CleanSpec.mk files 2015-04-16 07:54:09 -04:00
CONTRIBUTING.md Add CONTRIBUTING.md 2019-06-14 14:58:52 -04:00
Makefile build: setup buildpaths if DESTDIR is specified 2018-02-14 20:02:03 +01:00
README README: Update Fedora python 3 dependencies 2019-02-20 16:43:27 +01:00

Please submit all bug reports and patches to selinux@vger.kernel.org.
Subscribe by sending "subscribe selinux" in the body of an email
to majordomo@vger.kernel.org.

Build dependencies on Fedora:
yum install audit-libs-devel bison bzip2-devel dbus-devel dbus-glib-devel flex flex-devel flex-static glib2-devel libcap-devel libcap-ng-devel pam-devel pcre-devel python3-devel python3-setools swig xmlto redhat-rpm-config

To build and install everything under a private directory, run:
make DESTDIR=~/obj install install-pywrap

To install as the default system libraries and binaries
(overwriting any previously installed ones - dangerous!),
on x86_64, run:
make LIBDIR=/usr/lib64 SHLIBDIR=/lib64 install install-pywrap relabel
or on x86 (32-bit), run:
make install install-pywrap relabel

This may render your system unusable if the upstream SELinux userspace
lacks library functions or other dependencies relied upon by your
distribution.  If it breaks, you get to keep both pieces.

To install libsepol on macOS (mainly for policy analysis):
cd libsepol; make PREFIX=/usr/local install

This requires GNU coreutils (brew install coreutils).