[libcamera-devel] [PATCH] libcamera: raspberry: Fix segfault in ~RPiCameraData()

Jacopo Mondi jacopo at jmondi.org
Wed May 20 17:10:19 CEST 2020


The RPiCameraData class destructor tries to stop its ipa_ instance
without making sure it has been initialized.

If the RPiCameraData gets destroyed before its ipa_ member is
initialized, in example if the sensor initialization fails during the
match() function. A nullptr dereference segfault is triggered preventing
a graceful library teardown.

Fix this by checking for ipa_ to be initialized before stopping it.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 3 ++-
 src/libcamera/property_ids.yaml                    | 1 -
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 07ca9f5d7f53..e16a9c7f10d3 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -304,7 +304,8 @@ public:
 		}
 
 		/* Stop the IPA proxy thread. */
-		ipa_->stop();
+		if (ipa_)
+			ipa_->stop();
 	}
 
 	void frameStarted(uint32_t sequence);
diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml
index 2ae178a73d52..da4d0bbf329c 100644
--- a/src/libcamera/property_ids.yaml
+++ b/src/libcamera/property_ids.yaml
@@ -398,7 +398,6 @@ controls:
         The property can be used to calculate the physical size of the sensor's
         pixel array.
 
-
   - PixelArrayFullSize:
       type: Size
       description: |
-- 
2.26.2



More information about the libcamera-devel mailing list