From patchwork Fri Apr 26 14:13:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 1105 Return-Path: Received: from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net [195.74.38.229]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 29D2F60B2E for ; Fri, 26 Apr 2019 16:13:41 +0200 (CEST) X-Halon-ID: 741b3e76-682d-11e9-81fd-0050569116f7 Authorized-sender: niklas@soderlund.pp.se Received: from wyvern.station (unknown [37.182.44.227]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA id 741b3e76-682d-11e9-81fd-0050569116f7; Fri, 26 Apr 2019 16:13:27 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Fri, 26 Apr 2019 16:13:32 +0200 Message-Id: <20190426141332.2782-1-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2] libcamera: camera: Check requests before queueing them X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Apr 2019 14:13:41 -0000 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(+) diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 655996f26224ef49..9cea3fd06238c1cb 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";