Merge "Only allow fingerprint auth for the current user" into mnc-dev
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 9ee3bc2..1be3267 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -23,6 +23,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
 import android.os.Binder;
 import android.os.Environment;
 import android.os.Handler;
@@ -36,6 +37,7 @@
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.util.Slog;
 
 import com.android.server.SystemService;
@@ -418,9 +420,22 @@
                 "Must have " + permission + " permission.");
     }
 
+    boolean isCurrentUserOrProfile(int userId) {
+        UserManager um = UserManager.get(mContext);
+
+        // Allow current user or profiles of the current user...
+        List<UserInfo> profiles = um.getEnabledProfiles(userId);
+        final int n = profiles.size();
+        for (int i = 0; i < n; i++) {
+            if (profiles.get(i).id == userId) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private boolean canUseFingerprint(String opPackageName) {
         checkPermission(USE_FINGERPRINT);
-
         return mAppOps.noteOp(AppOpsManager.OP_USE_FINGERPRINT, Binder.getCallingUid(),
                 opPackageName) == AppOpsManager.MODE_ALLOWED;
     }
@@ -664,8 +679,12 @@
         public void authenticate(final IBinder token, final long opId, final int groupId,
                 final IFingerprintServiceReceiver receiver, final int flags,
                 final String opPackageName) {
-
+            if (!isCurrentUserOrProfile(UserHandle.getCallingUserId())) {
+                Slog.w(TAG, "Can't authenticate non-current user");
+                return;
+            }
             if (!canUseFingerprint(opPackageName)) {
+                Slog.w(TAG, "Calling not granted permission to use fingerprint");
                 return;
             }
             final boolean restricted = isRestricted();