Blame SOURCES/0036-setfiles-Do-not-abort-on-labeling-error.patch

d6d821
From 53ccdd55adfbec60fb4277286f2ad94660838504 Mon Sep 17 00:00:00 2001
d6d821
From: Petr Lautrbach <plautrba@redhat.com>
d6d821
Date: Wed, 13 Jan 2021 22:09:47 +0100
d6d821
Subject: [PATCH] setfiles: Do not abort on labeling error
d6d821
d6d821
Commit 602347c7422e ("policycoreutils: setfiles - Modify to use
d6d821
selinux_restorecon") changed behavior of setfiles. Original
d6d821
implementation skipped files which it couldn't set context to while the
d6d821
new implementation aborts on them. setfiles should abort only if it
d6d821
can't validate a context from spec_file.
d6d821
d6d821
Reproducer:
d6d821
d6d821
    # mkdir -p r/1 r/2 r/3
d6d821
    # touch r/1/1 r/2/1
d6d821
    # chattr +i r/2/1
d6d821
    # touch r/3/1
d6d821
    # setfiles -r r -v /etc/selinux/targeted/contexts/files/file_contexts r
d6d821
    Relabeled r from unconfined_u:object_r:mnt_t:s0 to unconfined_u:object_r:root_t:s0
d6d821
    Relabeled r/2 from unconfined_u:object_r:mnt_t:s0 to unconfined_u:object_r:default_t:s0
d6d821
    setfiles: Could not set context for r/2/1:  Operation not permitted
d6d821
d6d821
r/3 and r/1 are not relabeled.
d6d821
d6d821
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
d6d821
---
d6d821
 policycoreutils/setfiles/setfiles.c | 4 +---
d6d821
 1 file changed, 1 insertion(+), 3 deletions(-)
d6d821
d6d821
diff --git a/policycoreutils/setfiles/setfiles.c b/policycoreutils/setfiles/setfiles.c
d6d821
index bc83c27b4c06..68eab45aa2b4 100644
d6d821
--- a/policycoreutils/setfiles/setfiles.c
d6d821
+++ b/policycoreutils/setfiles/setfiles.c
d6d821
@@ -182,6 +182,7 @@ int main(int argc, char **argv)
d6d821
 	policyfile = NULL;
d6d821
 	nerr = 0;
d6d821
 
d6d821
+	r_opts.abort_on_error = 0;
d6d821
 	r_opts.progname = strdup(argv[0]);
d6d821
 	if (!r_opts.progname) {
d6d821
 		fprintf(stderr, "%s:  Out of memory!\n", argv[0]);
d6d821
@@ -194,7 +195,6 @@ int main(int argc, char **argv)
d6d821
 		 * setfiles:
d6d821
 		 * Recursive descent,
d6d821
 		 * Does not expand paths via realpath,
d6d821
-		 * Aborts on errors during the file tree walk,
d6d821
 		 * Try to track inode associations for conflict detection,
d6d821
 		 * Does not follow mounts (sets SELINUX_RESTORECON_XDEV),
d6d821
 		 * Validates all file contexts at init time.
d6d821
@@ -202,7 +202,6 @@ int main(int argc, char **argv)
d6d821
 		iamrestorecon = 0;
d6d821
 		r_opts.recurse = SELINUX_RESTORECON_RECURSE;
d6d821
 		r_opts.userealpath = 0; /* SELINUX_RESTORECON_REALPATH */
d6d821
-		r_opts.abort_on_error = SELINUX_RESTORECON_ABORT_ON_ERROR;
d6d821
 		r_opts.add_assoc = SELINUX_RESTORECON_ADD_ASSOC;
d6d821
 		/* FTS_PHYSICAL and FTS_NOCHDIR are always set by selinux_restorecon(3) */
d6d821
 		r_opts.xdev = SELINUX_RESTORECON_XDEV;
d6d821
@@ -226,7 +225,6 @@ int main(int argc, char **argv)
d6d821
 		iamrestorecon = 1;
d6d821
 		r_opts.recurse = 0;
d6d821
 		r_opts.userealpath = SELINUX_RESTORECON_REALPATH;
d6d821
-		r_opts.abort_on_error = 0;
d6d821
 		r_opts.add_assoc = 0;
d6d821
 		r_opts.xdev = 0;
d6d821
 		r_opts.ignore_mounts = 0;
d6d821
-- 
d6d821
2.30.0
d6d821