From 8b51674b2d2588c97ee6ddb976d6458ad33e2880 Mon Sep 17 00:00:00 2001
From: Stephen Smalley <sds@tycho.nsa.gov>
Date: Wed, 8 Jan 2014 09:29:30 -0500
Subject: [PATCH] Restrict ability to set checkreqprot.

Now that we set /sys/fs/selinux/checkreqprot via init.rc,
restrict the ability to set it to only the kernel domain.

Change-Id: I975061fd0e69c158db9bdb23e6ba77948e3fead1
Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
---
 domain.te     | 2 +-
 kernel.te     | 3 +++
 unconfined.te | 2 +-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/domain.te b/domain.te
index a49898048..653a50776 100644
--- a/domain.te
+++ b/domain.te
@@ -148,7 +148,7 @@ neverallow { domain -init } kernel:security load_policy;
 # init starts in kernel domain and switches to init domain via setcon in
 # the init.rc, so the setenforce occurs while still in kernel. After
 # switching domains, there is never any need to setenforce again by init.
-neverallow { domain -kernel } kernel:security setenforce;
+neverallow { domain -kernel } kernel:security { setenforce setcheckreqprot };
 
 # Only init, ueventd and system_server should be able to access HW RNG
 neverallow { domain -init -system_server -ueventd -unconfineddomain } hw_random_device:chr_file *;
diff --git a/kernel.te b/kernel.te
index 089786bff..4ccce20f1 100644
--- a/kernel.te
+++ b/kernel.te
@@ -9,3 +9,6 @@ allow kernel unlabeled:filesystem mount;
 
 # Initial setenforce by init prior to switching to init domain.
 allow kernel self:security setenforce;
+
+# Set checkreqprot by init.rc prior to switching to init domain.
+allow kernel self:security setcheckreqprot;
diff --git a/unconfined.te b/unconfined.te
index bdebf3a2c..ef134026d 100644
--- a/unconfined.te
+++ b/unconfined.te
@@ -17,7 +17,7 @@
 ######################################################
 
 allow unconfineddomain self:capability_class_set *;
-allow unconfineddomain kernel:security ~{ load_policy setenforce };
+allow unconfineddomain kernel:security ~{ load_policy setenforce setcheckreqprot };
 allow unconfineddomain kernel:system *;
 allow unconfineddomain domain:process ~ptrace;
 allow unconfineddomain domain:fd *;
-- 
GitLab