@@ -401,6 +401,7 @@ public class PackageManagerService extends IPackageManager.Stub {
401401 // package uri's from external media onto secure containers
402402 // or internal storage.
403403 private IMediaContainerService mContainerService = null ;
404+ private int mContainerServiceUserId ;
404405
405406 static final int SEND_PENDING_BROADCAST = 1 ;
406407 static final int MCS_BOUND = 3 ;
@@ -469,8 +470,12 @@ private boolean connectToService() {
469470 " DefaultContainerService" );
470471 Intent service = new Intent ().setComponent (DEFAULT_CONTAINER_COMPONENT );
471472 Process .setThreadPriority (Process .THREAD_PRIORITY_DEFAULT );
473+ mContainerServiceUserId = 0 ;
474+ if (mPendingInstalls .size () > 0 ) {
475+ mContainerServiceUserId = mPendingInstalls .get (0 ).getUser ().getIdentifier ();
476+ }
472477 if (mContext .bindService (service , mDefContainerConn ,
473- Context .BIND_AUTO_CREATE )) {
478+ Context .BIND_AUTO_CREATE , mContainerServiceUserId )) {
474479 Process .setThreadPriority (Process .THREAD_PRIORITY_BACKGROUND );
475480 mBound = true ;
476481 return true ;
@@ -547,6 +552,12 @@ void doHandleMessage(Message msg) {
547552 } else if (mPendingInstalls .size () > 0 ) {
548553 HandlerParams params = mPendingInstalls .get (0 );
549554 if (params != null ) {
555+ // Check if we're connected to the correct service, if it's an install
556+ // request.
557+ if (params .getUser ().getIdentifier () != mContainerServiceUserId ) {
558+ mHandler .sendEmptyMessage (MCS_RECONNECT );
559+ return ;
560+ }
550561 if (params .startCopy ()) {
551562 // We are done... look for more work or to
552563 // go idle.
@@ -5850,6 +5861,17 @@ private abstract class HandlerParams {
58505861 */
58515862 private int mRetries = 0 ;
58525863
5864+ /** User handle for the user requesting the information or installation. */
5865+ private final UserHandle mUser ;
5866+
5867+ HandlerParams (UserHandle user ) {
5868+ mUser = user ;
5869+ }
5870+
5871+ UserHandle getUser () {
5872+ return mUser ;
5873+ }
5874+
58535875 final boolean startCopy () {
58545876 boolean res ;
58555877 try {
@@ -5891,6 +5913,7 @@ class MeasureParams extends HandlerParams {
58915913 private final IPackageStatsObserver mObserver ;
58925914
58935915 public MeasureParams (PackageStats stats , IPackageStatsObserver observer ) {
5916+ super (new UserHandle (stats .userHandle ));
58945917 mObserver = observer ;
58955918 mStats = stats ;
58965919 }
@@ -5969,19 +5992,18 @@ class InstallParams extends HandlerParams {
59695992 private int mRet ;
59705993 private File mTempPackage ;
59715994 final ContainerEncryptionParams encryptionParams ;
5972- final UserHandle user ;
59735995
59745996 InstallParams (Uri packageURI ,
59755997 IPackageInstallObserver observer , int flags ,
59765998 String installerPackageName , VerificationParams verificationParams ,
59775999 ContainerEncryptionParams encryptionParams , UserHandle user ) {
6000+ super (user );
59786001 this .mPackageURI = packageURI ;
59796002 this .flags = flags ;
59806003 this .observer = observer ;
59816004 this .installerPackageName = installerPackageName ;
59826005 this .verificationParams = verificationParams ;
59836006 this .encryptionParams = encryptionParams ;
5984- this .user = user ;
59856007 }
59866008
59876009 public ManifestDigest getManifestDigest () {
@@ -5991,10 +6013,6 @@ public ManifestDigest getManifestDigest() {
59916013 return verificationParams .getManifestDigest ();
59926014 }
59936015
5994- public UserHandle getUser () {
5995- return user ;
5996- }
5997-
59986016 private int installLocationPolicy (PackageInfoLite pkgLite , int flags ) {
59996017 String packageName = pkgLite .packageName ;
60006018 int installLocation = pkgLite .installLocation ;
@@ -6332,7 +6350,8 @@ class MoveParams extends HandlerParams {
63326350 int mRet ;
63336351
63346352 MoveParams (InstallArgs srcArgs , IPackageMoveObserver observer , int flags ,
6335- String packageName , String dataDir , int uid ) {
6353+ String packageName , String dataDir , int uid , UserHandle user ) {
6354+ super (user );
63366355 this .srcArgs = srcArgs ;
63376356 this .observer = observer ;
63386357 this .flags = flags ;
@@ -9506,9 +9525,12 @@ public void performReceive(Intent intent, int resultCode, String data,
95069525 }
95079526 }
95089527
9528+ /** Binder call */
9529+ @ Override
95099530 public void movePackage (final String packageName , final IPackageMoveObserver observer ,
95109531 final int flags ) {
95119532 mContext .enforceCallingOrSelfPermission (android .Manifest .permission .MOVE_PACKAGE , null );
9533+ UserHandle user = new UserHandle (UserHandle .getCallingUserId ());
95129534 int returnCode = PackageManager .MOVE_SUCCEEDED ;
95139535 int currFlags = 0 ;
95149536 int newFlags = 0 ;
@@ -9559,14 +9581,15 @@ public void movePackage(final String packageName, final IPackageMoveObserver obs
95599581 * anyway.
95609582 */
95619583 if (returnCode != PackageManager .MOVE_SUCCEEDED ) {
9562- processPendingMove (new MoveParams (null , observer , 0 , packageName , null , -1 ),
9584+ processPendingMove (new MoveParams (null , observer , 0 , packageName ,
9585+ null , -1 , user ),
95639586 returnCode );
95649587 } else {
95659588 Message msg = mHandler .obtainMessage (INIT_COPY );
95669589 InstallArgs srcArgs = createInstallArgs (currFlags , pkg .applicationInfo .sourceDir ,
95679590 pkg .applicationInfo .publicSourceDir , pkg .applicationInfo .nativeLibraryDir );
95689591 MoveParams mp = new MoveParams (srcArgs , observer , newFlags , packageName ,
9569- pkg .applicationInfo .dataDir , pkg .applicationInfo .uid );
9592+ pkg .applicationInfo .dataDir , pkg .applicationInfo .uid , user );
95709593 msg .obj = mp ;
95719594 mHandler .sendMessage (msg );
95729595 }
0 commit comments