Skip to content

Commit 080ca09

Browse files
Amith YamasaniAndroid (Google) Code Review
authored andcommitted
Merge "Bind to the correct default container service when installing/moving/measuring pkgs" into jb-mr1-dev
2 parents 3782aab + 6ec1012 commit 080ca09

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

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.
@@ -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

Comments
 (0)