summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Oli Lan <olilan@google.com> 2021-05-12 17:38:19 +0100
committer Oli Lan <olilan@google.com> 2021-05-13 15:08:18 +0100
commit6bc896f705f3936078f47d96a1a0338f78a2f9db (patch)
tree10b0ee1e75efb553c75587f677e57d20d255762e
parentd261ad7bfe4ed784755cc27bb1cb7bceac2dc3c5 (diff)
Do not throw SecurityException from getPrimaryClip.
Currently getPrimaryClip throws a SecurityException if a Uri in clipboard has become invalid and permission to it can no longer be granted. This is unexpected and can crash apps that are trying to paste. This change catches the exception and clears clipboard if this case occurs. Bug: 187942504 Test: atest android.appsecurity.cts.AppSecurityTests#testPermissionDiffCert Test: build & flash, create invalid Uri by uninstalling and reinstalling Chrome Change-Id: I9994bb03f1aed47e32a500bba8886eea3f2cd905
-rw-r--r--services/core/java/com/android/server/clipboard/ClipboardService.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index ab67b138fdbf..093ecd57124f 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -379,7 +379,15 @@ public class ClipboardService extends SystemService {
return null;
}
synchronized (mLock) {
- addActiveOwnerLocked(intendingUid, pkg);
+ try {
+ addActiveOwnerLocked(intendingUid, pkg);
+ } catch (SecurityException e) {
+ // Permission could not be granted - URI may be invalid
+ Slog.i(TAG, "Could not grant permission to primary clip. Clearing clipboard.");
+ setPrimaryClipInternalLocked(null, intendingUid, pkg);
+ return null;
+ }
+
PerUserClipboard clipboard = getClipboardLocked(intendingUserId);
showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard);
notifyTextClassifierLocked(clipboard, pkg, intendingUid);