Skip to content

Commit 7e67151

Browse files
author
rich cannings
committed
Add permission checks for Verification API calls
Ensure that only applications with android.Manifest.permission.PACKAGE_VERIFICATION_AGENT can call application verification APIs, like PackageManager.verifyPendingInstall and PackageManager.extendVerificationTimeout Bug: 7049083 Change-Id: I5fc28b37e864d67cd319a1ed9d03a90dd15ad052
1 parent ac137b3 commit 7e67151

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

api/current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ package android {
7676
field public static final java.lang.String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS";
7777
field public static final java.lang.String NET_TUNNELING = "android.permission.NET_TUNNELING";
7878
field public static final java.lang.String NFC = "android.permission.NFC";
79+
field public static final java.lang.String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT";
7980
field public static final deprecated java.lang.String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
8081
field public static final java.lang.String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
8182
field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR";

core/java/android/content/pm/PackageManager.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2319,6 +2319,9 @@ public abstract int installExistingPackage(String packageName)
23192319
* {@link PackageManager#EXTRA_VERIFICATION_ID} Intent extra
23202320
* @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
23212321
* or {@link PackageManager#VERIFICATION_REJECT}.
2322+
* @throws SecurityException if the caller does not have the
2323+
* {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
2324+
* permission.
23222325
*/
23232326
public abstract void verifyPendingInstall(int id, int verificationCode);
23242327

@@ -2342,9 +2345,11 @@ public abstract int installExistingPackage(String packageName)
23422345
* @param millisecondsToDelay the amount of time requested for the timeout.
23432346
* Must be positive and less than
23442347
* {@link PackageManager#MAXIMUM_VERIFICATION_TIMEOUT}.
2345-
*
23462348
* @throws IllegalArgumentException if {@code millisecondsToDelay} is out
23472349
* of bounds or {@code verificationCodeAtTimeout} is unknown.
2350+
* @throws SecurityException if the caller does not have the
2351+
* {@link android.Manifest.permission#PACKAGE_VERIFICATION_AGENT}
2352+
* permission.
23482353
*/
23492354
public abstract void extendVerificationTimeout(int id,
23502355
int verificationCodeAtTimeout, long millisecondsToDelay);

core/res/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,6 @@
16621662

16631663
<!-- Package verifier needs to have this permission before the PackageManager will
16641664
trust it to verify packages.
1665-
@hide
16661665
-->
16671666
<permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
16681667
android:label="@string/permlab_packageVerificationAgent"

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5531,6 +5531,10 @@ public int installExistingPackage(String packageName) {
55315531

55325532
@Override
55335533
public void verifyPendingInstall(int id, int verificationCode) throws RemoteException {
5534+
mContext.enforceCallingOrSelfPermission(
5535+
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
5536+
"Only package verification agents can verify applications");
5537+
55345538
final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED);
55355539
final PackageVerificationResponse response = new PackageVerificationResponse(
55365540
verificationCode, Binder.getCallingUid());
@@ -5542,6 +5546,10 @@ public void verifyPendingInstall(int id, int verificationCode) throws RemoteExce
55425546
@Override
55435547
public void extendVerificationTimeout(int id, int verificationCodeAtTimeout,
55445548
long millisecondsToDelay) {
5549+
mContext.enforceCallingOrSelfPermission(
5550+
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
5551+
"Only package verification agents can extend verification timeouts");
5552+
55455553
final PackageVerificationState state = mPendingVerification.get(id);
55465554
final PackageVerificationResponse response = new PackageVerificationResponse(
55475555
verificationCodeAtTimeout, Binder.getCallingUid());

0 commit comments

Comments
 (0)