diff options
| -rw-r--r-- | services/java/com/android/server/BackupManagerService.java | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index 7ac314b8a7a9..6044eed8b3da 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -3591,7 +3591,16 @@ class BackupManagerService extends IBackupManager.Stub {                              } else {                                  // So far so good -- do the signatures match the manifest?                                  Signature[] sigs = mManifestSignatures.get(info.packageName); -                                if (!signaturesMatch(sigs, pkg)) { +                                if (signaturesMatch(sigs, pkg)) { +                                    // If this is a system-uid app without a declared backup agent, +                                    // don't restore any of the file data. +                                    if ((pkg.applicationInfo.uid < Process.FIRST_APPLICATION_UID) +                                            && (pkg.applicationInfo.backupAgentName == null)) { +                                        Slog.w(TAG, "Installed app " + info.packageName +                                                + " has restricted uid and no agent"); +                                        okay = false; +                                    } +                                } else {                                      Slog.w(TAG, "Installed app " + info.packageName                                              + " signatures do not match restore manifest");                                      okay = false; |