Skip to content

Commit 6ec1012

Browse files
author
Amith Yamasani
committed
Bind to the correct default container service when installing/moving/measuring pkgs
Change-Id: I0acfe955b5d57b4985d1922fe3dd841a81c824ed
1 parent 0b23b5f commit 6ec1012

1 file changed

Lines changed: 33 additions & 10 deletions

File tree

services/java/com/android/server/pm/PackageManagerService.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)