From c8459dc85e53a9275c89190b35f1da35cd996e46 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Tue, 18 Sep 2012 13:27:36 -0700 Subject: [PATCH] Settings provider needs to send notifications as itself ... and not as its ultimate caller, who may be a less-privileged application. Fixes bug 7188309 Change-Id: Iffd37b8da84f683bf665bf3d48c0b7fbc8dd721d --- .../com/android/providers/settings/SettingsProvider.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index a0ae9e31ac730..9839c16569fb8 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -344,7 +344,12 @@ public class SettingsProvider extends ContentProvider { String notify = uri.getQueryParameter("notify"); if (notify == null || "true".equals(notify)) { final int notifyTarget = isGlobal ? UserHandle.USER_ALL : userHandle; - getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget); + final long oldId = Binder.clearCallingIdentity(); + try { + getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget); + } finally { + Binder.restoreCallingIdentity(oldId); + } if (LOCAL_LOGV) Log.v(TAG, "notifying for " + notifyTarget + ": " + uri); } else { if (LOCAL_LOGV) Log.v(TAG, "notification suppressed: " + uri);