summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author lijilou <lijilou@xiaomi.corp-partner.google.com> 2024-11-13 15:58:14 +0800
committer Jilou li <lijilou@xiaomi.corp-partner.google.com> 2024-11-14 01:42:32 +0000
commit7be37b38cd0641e980e954129bb5de016c7fe32c (patch)
treedfd3bbf25305643906200aa49474c80da0e67f48
parent8ce40991fb51666921180b854508be100cc3eb00 (diff)
fix the CWE problem in Biometrics.
Multiple threads concurrently execute add operation and traversal operation, resulting in concurrent modification exception. We can replace the thread-unsafe ArrayList with the thread-safe CopyOnWriteArrayList. Test: OEM monkey test Flag: EXEMPT bugfix Bug: 378809027 Change-Id: Id956bebe94cfd773b852292815bcee7f5d60bb77
-rw-r--r--services/core/java/com/android/server/biometrics/BiometricService.java11
1 files changed, 6 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java
index 0e81eb914697..c31a4fb3569d 100644
--- a/services/core/java/com/android/server/biometrics/BiometricService.java
+++ b/services/core/java/com/android/server/biometrics/BiometricService.java
@@ -95,6 +95,7 @@ import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;
/**
@@ -126,7 +127,7 @@ public class BiometricService extends SystemService {
IGateKeeperService mGateKeeper;
// Get and cache the available biometric authenticators and their associated info.
- final ArrayList<BiometricSensor> mSensors = new ArrayList<>();
+ final CopyOnWriteArrayList<BiometricSensor> mSensors = new CopyOnWriteArrayList<>();
@VisibleForTesting
BiometricStrengthController mBiometricStrengthController;
@@ -150,13 +151,13 @@ public class BiometricService extends SystemService {
@NonNull private final Set<Integer> mSensorsPendingInvalidation;
public static InvalidationTracker start(@NonNull Context context,
- @NonNull ArrayList<BiometricSensor> sensors,
- int userId, int fromSensorId, @NonNull IInvalidationCallback clientCallback) {
+ @NonNull List<BiometricSensor> sensors, int userId,
+ int fromSensorId, @NonNull IInvalidationCallback clientCallback) {
return new InvalidationTracker(context, sensors, userId, fromSensorId, clientCallback);
}
private InvalidationTracker(@NonNull Context context,
- @NonNull ArrayList<BiometricSensor> sensors, int userId,
+ @NonNull List<BiometricSensor> sensors, int userId,
int fromSensorId, @NonNull IInvalidationCallback clientCallback) {
mClientCallback = clientCallback;
mSensorsPendingInvalidation = new ArraySet<>();
@@ -692,7 +693,7 @@ public class BiometricService extends SystemService {
@android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL)
@Override
- public synchronized void registerAuthenticator(int id, int modality,
+ public void registerAuthenticator(int id, int modality,
@Authenticators.Types int strength,
@NonNull IBiometricAuthenticator authenticator) {