From bfdd350c75036cb68946d614e307820a23cd95c9 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Thu, 9 Feb 2023 15:22:17 -0800 Subject: [PATCH] Camera: Avoid possible NPE after extension session configuration Camera extension clients are able to close and release camera and all associated extension resources while an advanced extension session configuration is in progress. In case, the extension initializer callback gets executed after all resources are released it may try to access the already released binder interface triggering NPE. Bug: 268437036 Test: atest -c -d cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java Change-Id: Ib6fdc9d08e973616dc7d83264dc3f320e496cbd3 --- .../impl/CameraAdvancedExtensionSessionImpl.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java index c8dc2d0b0b911..b52daab284b5e 100644 --- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java @@ -528,8 +528,15 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes boolean status = true; synchronized (mInterfaceLock) { try { - mSessionProcessor.onCaptureSessionStart(mRequestProcessor); - mInitialized = true; + if (mSessionProcessor != null) { + mSessionProcessor.onCaptureSessionStart(mRequestProcessor); + mInitialized = true; + } else { + Log.v(TAG, "Failed to start capture session, session released before " + + "extension start!"); + status = false; + mCaptureSession.close(); + } } catch (RemoteException e) { Log.e(TAG, "Failed to start capture session," + " extension service does not respond!");