[libcamera-devel] [PATCH] libcamera: camera: Ensure requests belong to the camera

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Mar 17 14:17:26 CET 2022


Requests are created by a Camera, and can only be queued
to that specific Camera. Enforce this during the public API
to prevent mis-use by incorrect applications.

Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 src/libcamera/camera.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index bb856d606f4a..dd6552e83eee 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -23,6 +23,7 @@
 #include "libcamera/internal/camera_controls.h"
 #include "libcamera/internal/formats.h"
 #include "libcamera/internal/pipeline_handler.h"
+#include "libcamera/internal/request.h"
 
 /**
  * \file libcamera/camera.h
@@ -1119,6 +1120,12 @@ int Camera::queueRequest(Request *request)
 	if (ret < 0)
 		return ret;
 
+	/* Requests can only be queued to the camera that created them.*/
+	if (request->_d()->camera() != this) {
+		LOG(Camera, Error) << "Request was not created by this camera";
+		return -EINVAL;
+	}
+
 	/*
 	 * The camera state may change until the end of the function. No locking
 	 * is however needed as PipelineHandler::queueRequest() will handle
-- 
2.32.0



More information about the libcamera-devel mailing list