From 599ef0e3cd848bbf8faa45147ac680d04d3ba333 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 15 Jun 2015 20:39:44 -0700 Subject: [PATCH] Limit number of fingerprint templates that can be enrolled per device user This change places an upper limit on the number of fingerprint templates that can be enrolled per account. This is done primarily for performance reasons, but may also be imposed by hardware and Trusted Execution Environment (TEE) reasons. Fixes bug 20731847 Change-Id: I5bc337698bef682cdf67940906d24842e1dffc28 --- core/res/res/values/config.xml | 3 +++ core/res/res/values/symbols.xml | 3 +++ .../fingerprint/FingerprintService.java | 22 ++++++++++++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index e7811df1041af..997f995dcf525 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2196,6 +2196,9 @@ com.android.systemui/com.android.systemui.keyguard.KeyguardService + + 5 + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 45e5d17b32187..ede843ec90b6b 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2125,6 +2125,9 @@ + + + diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 7f0be5766d1a7..c52a1c1ce6db8 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -33,6 +33,7 @@ import android.os.MessageQueue; import android.os.RemoteException; import android.os.SELinux; import android.os.ServiceManager; +import android.os.UserHandle; import android.util.Slog; import com.android.server.SystemService; @@ -389,12 +390,12 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } } - public List getEnrolledFingerprints(int groupId) { - return mFingerprintUtils.getFingerprintsForUser(mContext, groupId); + public List getEnrolledFingerprints(int userId) { + return mFingerprintUtils.getFingerprintsForUser(mContext, userId); } - public boolean hasEnrolledFingerprints(int groupId) { - return mFingerprintUtils.getFingerprintsForUser(mContext, groupId).size() > 0; + public boolean hasEnrolledFingerprints(int userId) { + return mFingerprintUtils.getFingerprintsForUser(mContext, userId).size() > 0; } boolean hasPermission(String permission) { @@ -598,6 +599,15 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe public void enroll(final IBinder token, final byte[] cryptoToken, final int groupId, final IFingerprintServiceReceiver receiver, final int flags) { checkPermission(MANAGE_FINGERPRINT); + final int limit = mContext.getResources().getInteger( + com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser); + final int callingUid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(callingUid); + final int enrolled = FingerprintService.this.getEnrolledFingerprints(userId).size(); + if (enrolled >= limit) { + Slog.w(TAG, "Too many fingerprints registered"); + return; + } final byte [] cryptoClone = Arrays.copyOf(cryptoToken, cryptoToken.length); final boolean restricted = isRestricted(); @@ -689,11 +699,11 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } @Override // Binder call - public List getEnrolledFingerprints(int groupId, String opPackageName) { + public List getEnrolledFingerprints(int userId, String opPackageName) { if (!canUseFingerprint(opPackageName)) { return Collections.emptyList(); } - return FingerprintService.this.getEnrolledFingerprints(groupId); + return FingerprintService.this.getEnrolledFingerprints(userId); } @Override // Binder call