From df06e9682642e1ca4863dec315ea3ad3a22766c9 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Wed, 10 Jun 2015 12:32:41 -0700 Subject: [PATCH] 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: Ic80a3377a5a94c9d10dd464eb1257b157a947510 (cherry picked from commit 548eb76c8f0e18d114ce4125905434c1c6920969) --- tools/releasetools/common.py | 14 ++++++++++++-- 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 f4e25d5a97..ae449c30ec 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -199,12 +199,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") @@ -253,6 +254,7 @@ def LoadRecoveryFSTab(read_helper, fstab_version): line = line.strip() if not line or line.startswith("#"): continue + # pieces = line.split() if len(pieces) != 5: raise ValueError("malformed recovery.fstab line: \"%s\"" % (line,)) @@ -272,9 +274,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 ceda0b9dbc..a9a9a0bd1d 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):