Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce5f2b3e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use per user info for seinfo" into pi-dev

parents 78e80568 27ccbb12
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.SELinuxUtil;
import android.content.pm.ServiceInfo;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.Signature;
@@ -10447,6 +10448,14 @@ public class PackageManagerService extends IPackageManager.Stub
            reportSettingsProblem(Log.WARN, msg);
        }
        final int userId = (user == null ? UserHandle.USER_SYSTEM : user.getIdentifier());
        // for existing packages, change the install state; but, only if it's explicitly specified
        if (!createNewPackage) {
            final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
            final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0;
            setInstantAppForUser(pkgSetting, userId, instantApp, fullApp);
        }
        if (disabledPkgSetting != null) {
            pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
        }
@@ -10469,6 +10478,8 @@ public class PackageManagerService extends IPackageManager.Stub
        pkg.applicationInfo.seInfo = SELinuxMMAC.getSeInfo(pkg, isPrivileged,
                pkg.applicationInfo.targetSandboxVersion, targetSdkVersion);
        pkg.applicationInfo.seInfoUser = SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState(
                userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId));
        pkg.mExtras = pkgSetting;
        pkg.applicationInfo.processName = fixProcessName(
@@ -13943,7 +13954,7 @@ public class PackageManagerService extends IPackageManager.Stub
        return PackageManager.INSTALL_SUCCEEDED;
    }
    void setInstantAppForUser(PackageSetting pkgSetting, int userId,
    static void setInstantAppForUser(PackageSetting pkgSetting, int userId,
            boolean instantApp, boolean fullApp) {
        // no state specified; do nothing
        if (!instantApp && !fullApp) {
@@ -16452,10 +16463,6 @@ public class PackageManagerService extends IPackageManager.Stub
                        childPs.oldCodePaths = ps.oldCodePaths;
                    }
                }
                // set instant app status, but, only if it's explicitly specified
                final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
                final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0;
                setInstantAppForUser(ps, user.getIdentifier(), instantApp, fullApp);
                prepareAppDataAfterInstallLIF(newPackage);
                addedPkg = true;
                mDexManager.notifyPackageUpdated(newPackage.packageName,
@@ -22422,17 +22429,25 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                    + Integer.toHexString(flags));
        }
        final PackageSetting ps;
        synchronized (mPackages) {
            ps = mSettings.mPackages.get(pkg.packageName);
        }
        final String volumeUuid = pkg.volumeUuid;
        final String packageName = pkg.packageName;
        final ApplicationInfo app = pkg.applicationInfo;
        final ApplicationInfo app = (ps == null)
                ? pkg.applicationInfo
                : PackageParser.generateApplicationInfo(pkg, 0, ps.readUserState(userId), userId);
        final int appId = UserHandle.getAppId(app.uid);
        Preconditions.checkNotNull(app.seInfo);
        final String seInfo = app.seInfo + (app.seInfoUser != null ? app.seInfoUser : "");
        long ceDataInode = -1;
        try {
            ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags,
                    appId, app.seInfo, app.targetSdkVersion);
                    appId, seInfo, app.targetSdkVersion);
        } catch (InstallerException e) {
            if (app.isSystemApp()) {
                logCriticalInfo(Log.ERROR, "Failed to create app data for " + packageName
@@ -22440,7 +22455,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                destroyAppDataLeafLIF(pkg, userId, flags);
                try {
                    ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags,
                            appId, app.seInfo, app.targetSdkVersion);
                            appId, seInfo, app.targetSdkVersion);
                    logCriticalInfo(Log.DEBUG, "Recovery succeeded!");
                } catch (InstallerException e2) {
                    logCriticalInfo(Log.DEBUG, "Recovery failed!");
@@ -22463,7 +22478,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        if ((flags & StorageManager.FLAG_STORAGE_CE) != 0 && ceDataInode != -1) {
            // TODO: mark this structure as dirty so we persist it!
            synchronized (mPackages) {
                final PackageSetting ps = mSettings.mPackages.get(packageName);
                if (ps != null) {
                    ps.setCeDataInode(ceDataInode, userId);
                }