OSDN Git Service

Support SELinux context label when mounting
authorTao Bao <tbao@google.com>
Wed, 10 Jun 2015 19:32:41 +0000 (12:32 -0700)
committerTao Bao <tbao@google.com>
Wed, 10 Jun 2015 22:35:34 +0000 (15:35 -0700)
If there is a SELinux context label in the recovery.fstab, we should
honor that when mounting the partition.

Bug: 19764039
Change-Id: I4df71a092b418cd340a18b2e3b0936de33d8e3f5

tools/releasetools/common.py
tools/releasetools/edify_generator.py

index 4b276c3..6f921e0 100644 (file)
@@ -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,))
index 3d0da88..281ed59 100644 (file)
@@ -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):