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

Commit 860d8b9a authored by Christopher Tate's avatar Christopher Tate
Browse files

Put package verifier on the power whitelist when invoked

Give the package verifier the right to run services while we're asking
it to do its thing.

Bug 31025833

Change-Id: If6a593d95fe37d4c2c7ab6d59aa2661c1e5df6b3
parent 774bd7a6
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -256,6 +256,7 @@ import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.server.AttributeCache;
import com.android.server.BackgroundDexOptJobService;
import com.android.server.DeviceIdleController;
import com.android.server.EventLogTags;
import com.android.server.FgThread;
import com.android.server.IntentResolver;
@@ -834,6 +835,8 @@ public class PackageManagerService extends IPackageManager.Stub {
    private UserManagerInternal mUserManagerInternal;
    private DeviceIdleController.LocalService mDeviceIdleController;
    private File mCacheDir;
    private ArraySet<String> mPrivappPermissionsViolations;
@@ -3841,6 +3844,14 @@ public class PackageManagerService extends IPackageManager.Stub {
        return mUserManagerInternal;
    }
    private DeviceIdleController.LocalService getDeviceIdleController() {
        if (mDeviceIdleController == null) {
            mDeviceIdleController =
                    LocalServices.getService(DeviceIdleController.LocalService.class);
        }
        return mDeviceIdleController;
    }
    /**
     * Update given flags when being used to request {@link PackageInfo}.
     */
@@ -14598,6 +14609,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                    final List<ComponentName> sufficientVerifiers = matchVerifiers(pkgLite,
                            receivers, verificationState);
                    DeviceIdleController.LocalService idleController = getDeviceIdleController();
                    final long idleDuration = getVerificationTimeout();
                    /*
                     * If any sufficient verifiers were listed in the package
                     * manifest, attempt to ask them.
@@ -14610,6 +14624,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                        } else {
                            for (int i = 0; i < N; i++) {
                                final ComponentName verifierComponent = sufficientVerifiers.get(i);
                                idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
                                        verifierComponent.getPackageName(), idleDuration,
                                        verifierUser.getIdentifier(), false, "package verifier");
                                final Intent sufficientIntent = new Intent(verification);
                                sufficientIntent.setComponent(verifierComponent);
@@ -14630,6 +14647,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                         * target BroadcastReceivers have run.
                         */
                        verification.setComponent(requiredVerifierComponent);
                        idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
                                requiredVerifierComponent.getPackageName(), idleDuration,
                                verifierUser.getIdentifier(), false, "package verifier");
                        mContext.sendOrderedBroadcastAsUser(verification, verifierUser,
                                android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
                                new BroadcastReceiver() {