From 539b217b764562964c7f11b416da8391cb7cf93f Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 3 Sep 2014 13:50:23 -0700 Subject: The transport system API needs to manage binder identity ...around writing settings. It does its own proper permission check; it just needs to make sure not to accidentally crash the caller in strange and wondrous ways because of failing to clear binder identity before writing the result to secure settings. Bug 16542048 Change-Id: I88d1f2dbeebd24eed5d86989f0ca0d834878b054 --- .../server/backup/BackupManagerService.java | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 3e7a7e4108a4..083aa9beb399 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -8395,10 +8395,15 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF Slog.i(TAG, "Auto restore => " + doAutoRestore); - synchronized (this) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.BACKUP_AUTO_RESTORE, doAutoRestore ? 1 : 0); - mAutoRestore = doAutoRestore; + final long oldId = Binder.clearCallingIdentity(); + try { + synchronized (this) { + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.BACKUP_AUTO_RESTORE, doAutoRestore ? 1 : 0); + mAutoRestore = doAutoRestore; + } + } finally { + Binder.restoreCallingIdentity(oldId); } } @@ -8467,10 +8472,15 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF synchronized (mTransports) { String prevTransport = null; if (mTransports.get(transport) != null) { - prevTransport = mCurrentTransport; - mCurrentTransport = transport; - Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.BACKUP_TRANSPORT, transport); + final long oldId = Binder.clearCallingIdentity(); + try { + prevTransport = mCurrentTransport; + mCurrentTransport = transport; + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.BACKUP_TRANSPORT, transport); + } finally { + Binder.restoreCallingIdentity(oldId); + } Slog.v(TAG, "selectBackupTransport() set " + mCurrentTransport + " returning " + prevTransport); } else { -- cgit v1.2.3-59-g8ed1b