From patchwork Fri Oct 1 21:15:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 14025 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id BC754BDC71 for ; Fri, 1 Oct 2021 21:15:58 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1BDAD691AD; Fri, 1 Oct 2021 23:15:58 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="IAJsQyG2"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 43B85691A6 for ; Fri, 1 Oct 2021 23:15:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1633122954; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=wm2Vp1tx9fNpntsIKsWCljZ3E5VHReP1nyy2Rk2Rf9w=; b=IAJsQyG2ObUthFPqfyPyybt66CrwDsyjCxI21ayBSXsYhctmi0RUbQdxZb2V+5bIKEziCe 9OGekrxYOnWO/mKxyiYVOuN/8LYfPQqyMpAtSazJAyLnzBo55C+C9+g4TiCNKQRrs+XJAl 7Er3vb9vQT+pit61d9zVU5X9nKzjaaw= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-559-PSFG3O8bMsW3V6fyrxZyiQ-1; Fri, 01 Oct 2021 17:15:53 -0400 X-MC-Unique: PSFG3O8bMsW3V6fyrxZyiQ-1 Received: by mail-wr1-f71.google.com with SMTP id l9-20020adfc789000000b00160111fd4e8so3175039wrg.17 for ; Fri, 01 Oct 2021 14:15:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wm2Vp1tx9fNpntsIKsWCljZ3E5VHReP1nyy2Rk2Rf9w=; b=zFK7BV0oqVVEMaffGwucHNPQ5O88gBzE7dGcOzZlSEQQPdmI6y87MW57pPzzjyu3P/ A1/niIbhavoVuRII8zUmpfr406XMPEmJwxyi9Lg/wU6UE4ExOqhRV8/eGCiFjKvPjHcr sOV/f9+ZGxPrM7Br34ewzA+Rn3KNbKLm1aVtxjhC3fDnACfzJCbyo8SpEjb71Rip8vtw Bdzc0OG2Rpj08ArV9lC01wkXx5sQaDF7iHN/eYWNAWmJabrwGyAnZudv9bQH97dehyaN Y1M2639zImnYQqY7tJwxWEWFKwsw6bZl1DNP0d6Vr8puFumZT4pxgmAOMdec0brs4cqq EPqg== X-Gm-Message-State: AOAM530DzPrEXva48XwIjaXiisSGd8EBKu9ORzD3yTKmMWIZe5TA+0kH LKtTHV5X6E9r7516oXYOIigigDDr4JFDJOHXbm3tdH836iIW0gB6N2rOjuiXammgJC9lEe+Xo8Y 22fG9RKCtNcD/YsS2d4q4B/HEcckfwgA9WqB/mpWmDCIOT7ONEjHBFxsdyKs/Cg6kOXRV5XsDXY 0OzF7lLzUs X-Received: by 2002:adf:a3d9:: with SMTP id m25mr139708wrb.27.1633122952272; Fri, 01 Oct 2021 14:15:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJwdZojpU0QnBHFFrAXt8q5NI+Zp/Wy4ypjvSVQNCgm20VHX13edLJ5FC/tWoQAcfUcoZycw== X-Received: by 2002:adf:a3d9:: with SMTP id m25mr139689wrb.27.1633122951937; Fri, 01 Oct 2021 14:15:51 -0700 (PDT) Received: from minerva.home ([92.176.231.106]) by smtp.gmail.com with ESMTPSA id y11sm8242871wrg.18.2021.10.01.14.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Oct 2021 14:15:51 -0700 (PDT) From: Javier Martinez Canillas To: libcamera-devel@lists.libcamera.org Date: Fri, 1 Oct 2021 23:15:24 +0200 Message-Id: <20211001211525.1423725-1-javierm@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=javierm@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [libcamera-devel] [PATCH v2 1/2] gstreamer: Check if Stream configurations were generated correctly X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicolas Dufresne Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Currently, the gst_libcamera_device_new() function assumes that a call to Camera::generateConfiguration() will always succeed, but that may not be the case and the return value must to be checked. Otherwise, this could lead to a NULL pointer dereference if the pipeline handler fails to generate a config for the VideoRecording stream role. Signed-off-by: Javier Martinez Canillas Reviewed-by: Nicolas Dufresne Reviewed-by: Laurent Pinchart --- Changes in v2: - Fix typos in commit message as pointed out by Nicolas Dufresne. - Add Nicolas Dufresne's Reviewed-by tag. src/gstreamer/gstlibcameraprovider.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gstreamer/gstlibcameraprovider.cpp b/src/gstreamer/gstlibcameraprovider.cpp index aee6f9a2be2..6eb0a0eb0c4 100644 --- a/src/gstreamer/gstlibcameraprovider.cpp +++ b/src/gstreamer/gstlibcameraprovider.cpp @@ -132,6 +132,10 @@ gst_libcamera_device_new(const std::shared_ptr &camera) roles.push_back(StreamRole::VideoRecording); std::unique_ptr config = camera->generateConfiguration(roles); + if (!config || config->size() != roles.size()) { + GST_ERROR("Failed to generate a default configuration for %s", name); + return nullptr; + } for (const StreamConfiguration &stream_cfg : *config) { GstCaps *sub_caps = gst_libcamera_stream_formats_to_caps(stream_cfg.formats()); @@ -189,8 +193,16 @@ gst_libcamera_provider_probe(GstDeviceProvider *provider) for (const std::shared_ptr &camera : cm->cameras()) { GST_INFO_OBJECT(self, "Found camera '%s'", camera->id().c_str()); + + GstDevice *dev = gst_libcamera_device_new(camera); + if (!dev) { + GST_ERROR_OBJECT(self, "Failed to add camera '%s'", + camera->id().c_str()); + return nullptr; + } + devices = g_list_append(devices, - g_object_ref_sink(gst_libcamera_device_new(camera))); + g_object_ref_sink(dev)); } return devices;