From 93685c70c4f12217b7ec8e79eb95573d66e86c5f Mon Sep 17 00:00:00 2001 From: Siyamed Sinir Date: Wed, 6 Sep 2017 18:02:23 -0700 Subject: [PATCH] Prevent getting data from Clipboard if device is locked Clipboard should not return data if the device is locked. This CL checks for device locked state before returning values from get/has functions. Bug: 64934810 Change-Id: I856a9079fe64db0af44383fae1a9a418de959420 Merged-In: Icefac226615fe22a7735dff4ba4c3b528fb2ac12 (cherry picked from commit 0b8fa2f5e0d305f083345968a7c39fe7a6f0a158) --- .../com/android/server/clipboard/ClipboardService.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index 66aa40325a4f..bdd2d2bc7059 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -20,6 +20,7 @@ import android.app.ActivityManagerNative; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.IActivityManager; +import android.app.KeyguardManager; import android.content.BroadcastReceiver; import android.content.ClipData; import android.content.ClipDescription; @@ -255,7 +256,7 @@ public class ClipboardService extends IClipboard.Stub { public ClipData getPrimaryClip(String pkg) { synchronized (this) { if (mAppOps.noteOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(), - pkg) != AppOpsManager.MODE_ALLOWED) { + pkg) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) { return null; } addActiveOwnerLocked(Binder.getCallingUid(), pkg); @@ -266,7 +267,7 @@ public class ClipboardService extends IClipboard.Stub { public ClipDescription getPrimaryClipDescription(String callingPackage) { synchronized (this) { if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(), - callingPackage) != AppOpsManager.MODE_ALLOWED) { + callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) { return null; } PerUserClipboard clipboard = getClipboard(); @@ -277,7 +278,7 @@ public class ClipboardService extends IClipboard.Stub { public boolean hasPrimaryClip(String callingPackage) { synchronized (this) { if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(), - callingPackage) != AppOpsManager.MODE_ALLOWED) { + callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) { return false; } return getClipboard().primaryClip != null; @@ -301,7 +302,7 @@ public class ClipboardService extends IClipboard.Stub { public boolean hasClipboardText(String callingPackage) { synchronized (this) { if (mAppOps.checkOp(AppOpsManager.OP_READ_CLIPBOARD, Binder.getCallingUid(), - callingPackage) != AppOpsManager.MODE_ALLOWED) { + callingPackage) != AppOpsManager.MODE_ALLOWED || isDeviceLocked()) { return false; } PerUserClipboard clipboard = getClipboard(); @@ -313,6 +314,11 @@ public class ClipboardService extends IClipboard.Stub { } } + private boolean isDeviceLocked() { + final KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class); + return keyguardManager != null && keyguardManager.isDeviceLocked(); + } + private final void checkUriOwnerLocked(Uri uri, int uid) { if (!"content".equals(uri.getScheme())) { return; -- 2.11.0