summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2010-04-21 18:15:44 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-04-21 18:15:44 -0700
commit7e93aad42d5f96e4e3a471e49384e1ce794c9411 (patch)
tree330f67bbeb8f4f9bd9cb52a58b7fc4825080ae4b /services
parentf77fff4b4e904486bf25affde713294d40764e15 (diff)
parent36fa47139d4621dc4bf8d89caa8650495d901b00 (diff)
downloadframeworks_base-7e93aad42d5f96e4e3a471e49384e1ce794c9411.zip
frameworks_base-7e93aad42d5f96e4e3a471e49384e1ce794c9411.tar.gz
frameworks_base-7e93aad42d5f96e4e3a471e49384e1ce794c9411.tar.bz2
am 36fa4713: Merge "Fix security hole in Google backup transport registration" into froyo
Merge commit '36fa47139d4621dc4bf8d89caa8650495d901b00' into froyo-plus-aosp * commit '36fa47139d4621dc4bf8d89caa8650495d901b00': Fix security hole in Google backup transport registration
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/BackupManagerService.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 91dfaf3..d67dde0 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -479,10 +479,25 @@ class BackupManagerService extends IBackupManager.Stub {
// Attach to the Google backup transport. When this comes up, it will set
// itself as the current transport because we explicitly reset mCurrentTransport
// to null.
- Intent intent = new Intent().setComponent(new ComponentName(
- "com.google.android.backup",
- "com.google.android.backup.BackupTransportService"));
- context.bindService(intent, mGoogleConnection, Context.BIND_AUTO_CREATE);
+ ComponentName transportComponent = new ComponentName("com.google.android.backup",
+ "com.google.android.backup.BackupTransportService");
+ try {
+ // If there's something out there that is supposed to be the Google
+ // backup transport, make sure it's legitimately part of the OS build
+ // and not an app lying about its package name.
+ ApplicationInfo info = mPackageManager.getApplicationInfo(
+ transportComponent.getPackageName(), 0);
+ if ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ if (DEBUG) Slog.v(TAG, "Binding to Google transport");
+ Intent intent = new Intent().setComponent(transportComponent);
+ context.bindService(intent, mGoogleConnection, Context.BIND_AUTO_CREATE);
+ } else {
+ Slog.w(TAG, "Possible Google transport spoof: ignoring " + info);
+ }
+ } catch (PackageManager.NameNotFoundException nnf) {
+ // No such package? No binding.
+ if (DEBUG) Slog.v(TAG, "Google transport not present");
+ }
// Now that we know about valid backup participants, parse any
// leftover journal files into the pending backup set