am 0e290b77: am ce30fca8: am e531e2ec: am 3b2a9d22: Merge "Change when the SELinux relabel of /data/data occurs."

* commit '0e290b7708e2ac59e645f499d8348a3a087a9568':
  Change when the SELinux relabel of /data/data occurs.
This commit is contained in:
Nick Kralevich
2014-03-31 20:32:13 +00:00
committed by Android Git Automerger
2 changed files with 21 additions and 9 deletions

View File

@@ -407,7 +407,14 @@ public final class Installer extends SystemService {
return execute(builder.toString());
}
public boolean restoreconData() {
return (execute("restorecondata") == 0);
public boolean restoreconData(String pkgName, String seinfo, int uid) {
StringBuilder builder = new StringBuilder("restorecondata");
builder.append(' ');
builder.append(pkgName);
builder.append(' ');
builder.append(seinfo != null ? seinfo : "!");
builder.append(' ');
builder.append(uid);
return (execute(builder.toString()) == 0);
}
}

View File

@@ -402,6 +402,9 @@ public class PackageManagerService extends IPackageManager.Stub {
// If mac_permissions.xml was found for seinfo labeling.
boolean mFoundPolicyFile;
// If a recursive restorecon of /data/data/<pkg> is needed.
private boolean mShouldRestoreconData = SELinuxMMAC.shouldRestorecon();
// All available activities, for your resolving pleasure.
final ActivityIntentResolver mActivities =
new ActivityIntentResolver();
@@ -1536,13 +1539,6 @@ public class PackageManagerService extends IPackageManager.Stub {
// can downgrade to reader
mSettings.writeLPr();
if (SELinuxMMAC.shouldRestorecon()) {
Slog.i(TAG, "Relabeling of /data/data and /data/user issued.");
if (mInstaller.restoreconData()) {
SELinuxMMAC.setRestoreconDone();
}
}
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_READY,
SystemClock.uptimeMillis());
@@ -4787,6 +4783,11 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
pkg.applicationInfo.dataDir = dataPath.getPath();
if (mShouldRestoreconData) {
Slog.i(TAG, "SELinux relabeling of " + pkg.packageName + " issued.");
mInstaller.restoreconData(pkg.packageName, pkg.applicationInfo.seinfo,
pkg.applicationInfo.uid);
}
} else {
if (DEBUG_PACKAGE_SCANNING) {
if ((parseFlags & PackageParser.PARSE_CHATTY) != 0)
@@ -11432,6 +11433,10 @@ public class PackageManagerService extends IPackageManager.Stub {
*/
public void scanAvailableAsecs() {
updateExternalMediaStatusInner(true, false, false);
if (mShouldRestoreconData) {
SELinuxMMAC.setRestoreconDone();
mShouldRestoreconData = false;
}
}
/*