summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2015-06-10 12:32:41 -0700
committerTao Bao <tbao@google.com>2015-06-10 15:35:34 -0700
commit548eb76c8f0e18d114ce4125905434c1c6920969 (patch)
tree7fd86125397411a2cb3a988f22e64afabc08b64e
parent942a42e31de9a0468014a256ed7fdd67cb208e64 (diff)
downloadbuild-548eb76c8f0e18d114ce4125905434c1c6920969.zip
build-548eb76c8f0e18d114ce4125905434c1c6920969.tar.gz
build-548eb76c8f0e18d114ce4125905434c1c6920969.tar.bz2
Support SELinux context label when mounting
If there is a SELinux context label in the recovery.fstab, we should honor that when mounting the partition. Bug: 19764039 Change-Id: I4df71a092b418cd340a18b2e3b0936de33d8e3f5
-rw-r--r--tools/releasetools/common.py14
-rw-r--r--tools/releasetools/edify_generator.py5
2 files changed, 16 insertions, 3 deletions
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 4b276c3..6f921e0 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -202,12 +202,13 @@ def LoadDictionaryFromLines(lines):
def LoadRecoveryFSTab(read_helper, fstab_version):
class Partition(object):
- def __init__(self, mount_point, fs_type, device, length, device2):
+ def __init__(self, mount_point, fs_type, device, length, device2, context):
self.mount_point = mount_point
self.fs_type = fs_type
self.device = device
self.length = length
self.device2 = device2
+ self.context = context
try:
data = read_helper("RECOVERY/RAMDISK/etc/recovery.fstab")
@@ -256,6 +257,7 @@ def LoadRecoveryFSTab(read_helper, fstab_version):
line = line.strip()
if not line or line.startswith("#"):
continue
+ # <src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
pieces = line.split()
if len(pieces) != 5:
raise ValueError("malformed recovery.fstab line: \"%s\"" % (line,))
@@ -275,9 +277,17 @@ def LoadRecoveryFSTab(read_helper, fstab_version):
# Ignore all unknown options in the unified fstab
continue
+ mount_flags = pieces[3]
+ # Honor the SELinux context if present.
+ context = None
+ for i in mount_flags.split(","):
+ if i.startswith("context="):
+ context = i
+
mount_point = pieces[1]
d[mount_point] = Partition(mount_point=mount_point, fs_type=pieces[2],
- device=pieces[0], length=length, device2=None)
+ device=pieces[0], length=length,
+ device2=None, context=context)
else:
raise ValueError("Unknown fstab_version: \"%d\"" % (fstab_version,))
diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py
index 3d0da88..281ed59 100644
--- a/tools/releasetools/edify_generator.py
+++ b/tools/releasetools/edify_generator.py
@@ -177,9 +177,12 @@ class EdifyGenerator(object):
if "=" in option:
key, value = option.split("=", 1)
mount_dict[key] = value
+ mount_flags = mount_dict.get(p.fs_type, "")
+ if p.context is not None:
+ mount_flags = p.context + ("," + mount_flags if mount_flags else "")
self.script.append('mount("%s", "%s", "%s", "%s", "%s");' % (
p.fs_type, common.PARTITION_TYPES[p.fs_type], p.device,
- p.mount_point, mount_dict.get(p.fs_type, "")))
+ p.mount_point, mount_flags))
self.mounts.add(p.mount_point)
def UnpackPackageDir(self, src, dst):