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

Commit e812d909 authored by Robin Lee's avatar Robin Lee Committed by Jeff Sharkey
Browse files

Clear identity before calling out to PackageHelper

PackageHelper.resolveInstallLocation expects the binding user to be
equivalent to the calling user. If this is not the case, it may fail
and throw an exception preventing anyone but user 0 from installing
anything.

Bug: 17175251
Change-Id: Id5615738c7b4e1234a548c7b4a410282d14c9ee3
parent e4be1bf2
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -485,9 +485,12 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
        if (params.mode == SessionParams.MODE_FULL_INSTALL) {
            // Brand new install, use best resolved location. This also verifies
            // that target has enough free space for the install.
            final long ident = Binder.clearCallingIdentity();
            try {
                final int resolved = PackageHelper.resolveInstallLocation(mContext,
                        params.appPackageName, params.installLocation, params.sizeBytes,
                        params.installFlags);

                if (resolved == PackageHelper.RECOMMEND_INSTALL_INTERNAL) {
                    stageInternal = true;
                } else if (resolved == PackageHelper.RECOMMEND_INSTALL_EXTERNAL) {
@@ -495,7 +498,9 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
                } else {
                    throw new IOException("No storage with enough free space; res=" + resolved);
                }

            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        } else if (params.mode == SessionParams.MODE_INHERIT_EXISTING) {
            // We always stage inheriting sessions on internal storage first,
            // since we don't want to grow containers until we're sure that