@@ -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.
@@ -5826,6 +5837,17 @@ private abstract class HandlerParams {
58265837 */
58275838 private int mRetries = 0 ;
58285839
5840+ /** User handle for the user requesting the information or installation. */
5841+ private final UserHandle mUser ;
5842+
5843+ HandlerParams (UserHandle user ) {
5844+ mUser = user ;
5845+ }
5846+
5847+ UserHandle getUser () {
5848+ return mUser ;
5849+ }
5850+
58295851 final boolean startCopy () {
58305852 boolean res ;
58315853 try {
@@ -5867,6 +5889,7 @@ class MeasureParams extends HandlerParams {
58675889 private final IPackageStatsObserver mObserver ;
58685890
58695891 public MeasureParams (PackageStats stats , IPackageStatsObserver observer ) {
5892+ super (new UserHandle (stats .userHandle ));
58705893 mObserver = observer ;
58715894 mStats = stats ;
58725895 }
@@ -5945,19 +5968,18 @@ class InstallParams extends HandlerParams {
59455968 private int mRet ;
59465969 private File mTempPackage ;
59475970 final ContainerEncryptionParams encryptionParams ;
5948- final UserHandle user ;
59495971
59505972 InstallParams (Uri packageURI ,
59515973 IPackageInstallObserver observer , int flags ,
59525974 String installerPackageName , VerificationParams verificationParams ,
59535975 ContainerEncryptionParams encryptionParams , UserHandle user ) {
5976+ super (user );
59545977 this .mPackageURI = packageURI ;
59555978 this .flags = flags ;
59565979 this .observer = observer ;
59575980 this .installerPackageName = installerPackageName ;
59585981 this .verificationParams = verificationParams ;
59595982 this .encryptionParams = encryptionParams ;
5960- this .user = user ;
59615983 }
59625984
59635985 public ManifestDigest getManifestDigest () {
@@ -5967,10 +5989,6 @@ public ManifestDigest getManifestDigest() {
59675989 return verificationParams .getManifestDigest ();
59685990 }
59695991
5970- public UserHandle getUser () {
5971- return user ;
5972- }
5973-
59745992 private int installLocationPolicy (PackageInfoLite pkgLite , int flags ) {
59755993 String packageName = pkgLite .packageName ;
59765994 int installLocation = pkgLite .installLocation ;
@@ -6308,7 +6326,8 @@ class MoveParams extends HandlerParams {
63086326 int mRet ;
63096327
63106328 MoveParams (InstallArgs srcArgs , IPackageMoveObserver observer , int flags ,
6311- String packageName , String dataDir , int uid ) {
6329+ String packageName , String dataDir , int uid , UserHandle user ) {
6330+ super (user );
63126331 this .srcArgs = srcArgs ;
63136332 this .observer = observer ;
63146333 this .flags = flags ;
@@ -9490,9 +9509,12 @@ public void performReceive(Intent intent, int resultCode, String data,
94909509 }
94919510 }
94929511
9512+ /** Binder call */
9513+ @ Override
94939514 public void movePackage (final String packageName , final IPackageMoveObserver observer ,
94949515 final int flags ) {
94959516 mContext .enforceCallingOrSelfPermission (android .Manifest .permission .MOVE_PACKAGE , null );
9517+ UserHandle user = new UserHandle (UserHandle .getCallingUserId ());
94969518 int returnCode = PackageManager .MOVE_SUCCEEDED ;
94979519 int currFlags = 0 ;
94989520 int newFlags = 0 ;
@@ -9543,14 +9565,15 @@ public void movePackage(final String packageName, final IPackageMoveObserver obs
95439565 * anyway.
95449566 */
95459567 if (returnCode != PackageManager .MOVE_SUCCEEDED ) {
9546- processPendingMove (new MoveParams (null , observer , 0 , packageName , null , -1 ),
9568+ processPendingMove (new MoveParams (null , observer , 0 , packageName ,
9569+ null , -1 , user ),
95479570 returnCode );
95489571 } else {
95499572 Message msg = mHandler .obtainMessage (INIT_COPY );
95509573 InstallArgs srcArgs = createInstallArgs (currFlags , pkg .applicationInfo .sourceDir ,
95519574 pkg .applicationInfo .publicSourceDir , pkg .applicationInfo .nativeLibraryDir );
95529575 MoveParams mp = new MoveParams (srcArgs , observer , newFlags , packageName ,
9553- pkg .applicationInfo .dataDir , pkg .applicationInfo .uid );
9576+ pkg .applicationInfo .dataDir , pkg .applicationInfo .uid , user );
95549577 msg .obj = mp ;
95559578 mHandler .sendMessage (msg );
95569579 }
0 commit comments