From 41f233f4658f20ac36845ed262bfeb8a7a9eea45 Mon Sep 17 00:00:00 2001
From: Narayan Kamath <narayan@google.com>
Date: Thu, 14 May 2015 14:01:24 +0100
Subject: [PATCH] Allow system_server to link,relabel and create_dir
 dalvikcache_data_file.

Required by the installation flow for split APKs.

bug: 20889739

Change-Id: I3e14335f3bcfe76d1d24d233f53a728a6d90e8a1
---
 domain.te        |  4 ++++
 system_server.te | 19 +++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/domain.te b/domain.te
index fc4cfd85a..19de0c0af 100644
--- a/domain.te
+++ b/domain.te
@@ -350,6 +350,10 @@ neverallow {
   -zygote
   -installd
   -dex2oat
+  -system_server # TODO: The system server needs to create directories
+                 # and link files for split APK installs. This could perhaps be
+                 # removed if we made installd responsible for manipulating the
+                 # staging directory.
 } dalvikcache_data_file:file no_w_file_perms;
 
 # Only system_server should be able to send commands via the zygote socket
diff --git a/system_server.te b/system_server.te
index 0b18eb4b6..5d1398ab1 100644
--- a/system_server.te
+++ b/system_server.te
@@ -16,6 +16,25 @@ allow system_server system_server_tmpfs:file execute;
 allow system_server dalvikcache_data_file:file execute;
 allow system_server dalvikcache_data_file:dir r_dir_perms;
 
+# For PackageInstallerSession.
+#
+# All of these rules relate to the installation and compilation of split
+# APKs. Roughly, the process is as follows. The rules below only pertain
+# to step (3) of the process
+#
+# (1) Create a staging directory.
+# (2) Link existing APKs from the split
+#
+# (3) Link existing compiled oat files : This requires "create_dir_perms"
+# to create oat directories (foo/oat and foo/oat/x86), "relabelto" to
+# make sure they have the right label, and "link" to link files.
+#
+# (3) Invoke dex2oat to compile the updated / new split
+# (4) Rename the staging directory back to the final path.
+allow system_server dalvikcache_data_file:file link;
+allow system_server dalvikcache_data_file:dir relabelto;
+allow system_server dalvikcache_data_file:dir create_dir_perms;
+
 # /data/resource-cache
 allow system_server resourcecache_data_file:file r_file_perms;
 allow system_server resourcecache_data_file:dir r_dir_perms;
-- 
GitLab