diff options
| author | Christopher Tate <ctate@google.com> | 2012-10-18 12:18:42 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2012-10-18 12:18:42 -0700 |
| commit | 2f2965985236d5cdc9cf2125055971da8e070e6f (patch) | |
| tree | 4485bc8e7904e8a81ad4f0cde9bc108580b1ee11 /core/java/android/app/ActivityThread.java | |
| parent | aefc2e6233edab4ec1fd1a74892f87e9fa7dade7 (diff) | |
| parent | 1ea75b88b7ac4273b7a5395c5c57c6453d6cd3d1 (diff) | |
am 1ea75b88: Merge "Sanity-check erroneous backup agent instantiations" into jb-mr1-dev
* commit '1ea75b88b7ac4273b7a5395c5c57c6453d6cd3d1':
Sanity-check erroneous backup agent instantiations
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index c9a2f91f42c6..c136a4d93966 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -29,6 +29,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.InstrumentationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ProviderInfo; @@ -2395,12 +2396,31 @@ public final class ActivityThread { private void handleCreateBackupAgent(CreateBackupAgentData data) { if (DEBUG_BACKUP) Slog.v(TAG, "handleCreateBackupAgent: " + data); + // Sanity check the requested target package's uid against ours + try { + PackageInfo requestedPackage = getPackageManager().getPackageInfo( + data.appInfo.packageName, 0, UserHandle.myUserId()); + if (requestedPackage.applicationInfo.uid != Process.myUid()) { + Slog.w(TAG, "Asked to instantiate non-matching package " + + data.appInfo.packageName); + return; + } + } catch (RemoteException e) { + Slog.e(TAG, "Can't reach package manager", e); + return; + } + // no longer idle; we have backup work to do unscheduleGcIdler(); // instantiate the BackupAgent class named in the manifest LoadedApk packageInfo = getPackageInfoNoCheck(data.appInfo, data.compatInfo); String packageName = packageInfo.mPackageName; + if (packageName == null) { + Slog.d(TAG, "Asked to create backup agent for nonexistent package"); + return; + } + if (mBackupAgents.get(packageName) != null) { Slog.d(TAG, "BackupAgent " + " for " + packageName + " already exists"); |
