From ff24be7022b39533cce219468b6fa3ce84460f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Wed, 17 Apr 2019 17:06:25 +0200 Subject: libcamera: camera: Check requests before queueing them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure all requests queued to a camera only contain streams which have been configured and belong to the camera. Signed-off-by: Niklas Söderlund Reviewed-by: Laurent Pinchart --- src/libcamera/camera.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/libcamera/camera.cpp') diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 655996f2..9cea3fd0 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -732,6 +732,7 @@ Request *Camera::createRequest() * \return 0 on success or a negative error code otherwise * \retval -ENODEV The camera has been disconnected from the system * \retval -EACCES The camera is not running so requests can't be queued + * \retval -EINVAL The request is invalid */ int Camera::queueRequest(Request *request) { @@ -741,6 +742,14 @@ int Camera::queueRequest(Request *request) if (!stateIs(CameraRunning)) return -EACCES; + for (auto const &it : request->buffers()) { + Stream *stream = it.first; + if (activeStreams_.find(stream) == activeStreams_.end()) { + LOG(Camera, Error) << "Invalid request"; + return -EINVAL; + } + } + int ret = request->prepare(); if (ret) { LOG(Camera, Error) << "Failed to prepare request"; -- cgit v1.2.1