diff options
author | Tao Bao <tbao@google.com> | 2015-06-10 12:32:41 -0700 |
---|---|---|
committer | Tao Bao <tbao@google.com> | 2015-06-10 15:35:34 -0700 |
commit | 548eb76c8f0e18d114ce4125905434c1c6920969 (patch) | |
tree | 7fd86125397411a2cb3a988f22e64afabc08b64e | |
parent | 942a42e31de9a0468014a256ed7fdd67cb208e64 (diff) | |
download | build-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.py | 14 | ||||
-rw-r--r-- | tools/releasetools/edify_generator.py | 5 |
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): |