From 7105f658189c1971f3a2c0cf039722df11770c27 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Fri, 30 Oct 2020 16:28:38 -0700 Subject: [PATCH] Add null check before invoking onChallengeInterruptFinished It's possible that the previous client's owner has died (binderDied), which results in ClientMonitor clearing the listener. Fixes: 171189072 Test: Start enrollment, kill settings, enter device credential. No crash observed. Change-Id: I09f5d206b1641e7c4bc1cb0b8ec22045e9c9d35f --- .../server/biometrics/sensors/face/Face10.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/Face10.java index f7998ee8caebb..d67ea1687595b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/Face10.java @@ -582,13 +582,19 @@ class Face10 implements IHwBinder.DeathRecipient { final FaceGenerateChallengeClient previousChallengeOwner = mCurrentChallengeOwner.getInterruptedClient(); mCurrentChallengeOwner = null; + Slog.d(TAG, "Previous challenge owner: " + previousChallengeOwner); if (previousChallengeOwner != null) { - try { - previousChallengeOwner.getListener() - .onChallengeInterruptFinished(mSensorId); - } catch (RemoteException e) { - Slog.e(TAG, "Unable to notify interrupt finished", e); + final ClientMonitorCallbackConverter listener = + previousChallengeOwner.getListener(); + if (listener == null) { + Slog.w(TAG, "Listener is null"); + } else { + try { + listener.onChallengeInterruptFinished(mSensorId); + } catch (RemoteException e) { + Slog.e(TAG, "Unable to notify interrupt finished", e); + } } } }