From patchwork Fri May 20 12:49:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naushir Patuck X-Patchwork-Id: 15990 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 99B1DC3256 for ; Fri, 20 May 2022 12:49:26 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F058F65660; Fri, 20 May 2022 14:49:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1653050966; bh=lbgUVdL/IiYXwBlZpkdcSOpYFudlePhM0LgzAZUX8Cc=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=fPNsUWEI0WfY/w8uyKodhletGb/rM7Z9d+EYUe1fEU218odcS7Zxb82oY30IhBPTP 1ypupmjkLTpCPtL2LO3cR0IT3qsBQlxA5mxvJl8Le62n4dIzR2s8SeEZz5CeiFiOR9 ZSZkxmILS5lnQCRSplU7o40s1z5ds/hoTuD+PGMgyjrgWgaRFS6od6jCfkB9B6wGcz ZfTfA1a6RKUzNvx1TZ9BkxvIh9y6AFIrBbzqnSBBoyVk7058+3eZ0ZKZIQZyufPkDQ wC18y0Z6H1lHjv4NgeezvencVaS0q2nH6upIgwzlEJYdEs9geSSkR8ItOXeI8MuH4m 5fe+LOD7HH20g== Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id D321760440 for ; Fri, 20 May 2022 14:49:24 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="O8cVnwNE"; dkim-atps=neutral Received: by mail-wm1-x32d.google.com with SMTP id p5-20020a1c2905000000b003970dd5404dso4301184wmp.0 for ; Fri, 20 May 2022 05:49:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=EHCmUYrMeziJ2VvmMELUSq2kmBO/F1R8kIswVwQE1U0=; b=O8cVnwNEJi1wYfND7ZiyEsJ7bTz0zf7lDS4pLaA+fDe68uY67AhR2ofJVRnQu5s1f+ PcDEAjsE+4TEJ16GNM7sMTNz/Nb90SCMKc1EaOvl3/ad7knMyp9EBsOEvwCI8rrSCsvi zJTHw7SQQzpkUoInK1mGgLU11jSO09MurHWA8VMNC63c4uk9Kh1x2a50p2GuzDNQd6Bs qBJCUIDjH8DrTLsy0JkUYEu40S7ngjmyvsRqmzha1KT1yZfyWvPTMqsNRovIimHt6QZA uSx81842jyaDCISWY5z9o04LtLMRNu+Ed6aKDUxdqijxnJUOAZ9BJYHEbcBv8y04LgoC nahw== 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=EHCmUYrMeziJ2VvmMELUSq2kmBO/F1R8kIswVwQE1U0=; b=rn6XRcj6xS2BF5iHNnIp/+G17JFqp8bJe/QxdcZoIYKIQkk4nafSyWTI8MBFxWO49g Ixxlg6DXg1tRA9DaHs+8Omq55I1kUje+oinVBmKjhBo7/Ko8aE8poZ4bevBjIAfbVa81 3GVKdD7mpcW2cKkgHDx4ScnFPf5rdKUbRGAhtq7bfZiIL0wLdYVm225nVLq66Vqf6xm9 GDME1AdiaDO3yn16MRg3wZLCY4o9ERSGOFSUfetUXmxPSVCbXfFVsJjU/0Zmn4C2QokS K+fzN1QwPeaIMw1hmBqaOLwMdCEiemcQ52LDtW8k6u+DnGcgJz2rdlhw1YlKa5GZpknp fCiQ== X-Gm-Message-State: AOAM530uPpjnmWSwNbj8f6d9fApVzNtoPMcQ8J06+KkPhsoik5hS9my+ s2W01nyjV9ws1XdjT1fx2BGl59jGQGPJRw== X-Google-Smtp-Source: ABdhPJy73seyr7/IoH8Z4XCAZ8e3Z1O0cPuNtEIsRBlRz/du9Msrw7A7XXkggFkAw8UrH76vJrxvhA== X-Received: by 2002:a05:600c:1d9d:b0:397:3dc1:5249 with SMTP id p29-20020a05600c1d9d00b003973dc15249mr428702wms.144.1653050963994; Fri, 20 May 2022 05:49:23 -0700 (PDT) Received: from naush-laptop.pitowers.org ([2a00:1098:3142:14:c51d:7ffc:b6ae:6da2]) by smtp.gmail.com with ESMTPSA id o3-20020a1c4d03000000b003942a244f30sm2356656wmh.9.2022.05.20.05.49.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 May 2022 05:49:23 -0700 (PDT) To: libcamera-devel@lists.libcamera.org Date: Fri, 20 May 2022 13:49:19 +0100 Message-Id: <20220520124919.2873559-1-naush@raspberrypi.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] pipeline: raspberrypi: Fix possible null dereference 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: , X-Patchwork-Original-From: Naushir Patuck via libcamera-devel From: Naushir Patuck Reply-To: Naushir Patuck Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The freeBuffers() cleanup code calls into the IPA to unmap and free shared buffers. However, this function could be called before the IPA has opened (via registerCamera()), causing a segmentation fault. Fix this by guarding against calling the IPA if it has not been opened. Signed-off-by: Naushir Patuck Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index 2636acb758b7..26cd4e5f2b99 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -1484,10 +1484,12 @@ void PipelineHandlerRPi::mapBuffers(Camera *camera, const RPi::BufferMap &buffer void RPiCameraData::freeBuffers() { - /* Copy the buffer ids from the unordered_set to a vector to pass to the IPA. */ - std::vector ipaBuffers(ipaBuffers_.begin(), ipaBuffers_.end()); - ipa_->unmapBuffers(ipaBuffers); - ipaBuffers_.clear(); + if (ipa_) { + /* Copy the buffer ids from the unordered_set to a vector to pass to the IPA. */ + std::vector ipaBuffers(ipaBuffers_.begin(), ipaBuffers_.end()); + ipa_->unmapBuffers(ipaBuffers); + ipaBuffers_.clear(); + } for (auto const stream : streams_) stream->releaseBuffers();