[{"id":21609,"web_url":"https://patchwork.libcamera.org/comment/21609/","msgid":"<20211206152631.3348D6086C@lancelot.ideasonboard.com>","date":"2021-12-06T15:26:31","subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2021-12-06 14: 07:01)\n> The SharedFD: :dup() implementation calls the C library dup() function on\nDate: Mon, 06 Dec 2021 15:26:27 +0000\nMessage-ID: <163880438747.995700.268589314019276531@Monstersaurus>\nUser-Agent: alot/0.10\n\n> the fd. When the SharedFD instance is invalid, this produces an invalid\n> fd, which is the correct behaviour, but logs an error message.\n\nIsn't logging an error in that event a reasonable thing to do?\n\n> Fix it by returning an invalid UniqueFD directly when the SharedFD is\n> invalid. This also saves a system call, which is always nice to do.\n\nSaving that seems worthwhile anyway as we know it won't succeed.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Fixes: fcf98514cb4e (\"libcamera: base: file_descriptor: Return UniqueFD from dup()\")\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/libcamera/base/shared_fd.cpp | 3 +++\n>  1 file changed, 3 insertions(+)\n> \n> diff --git a/src/libcamera/base/shared_fd.cpp b/src/libcamera/base/shared_fd.cpp\n> index bd2ab5aa25b7..c711cf579a04 100644\n> --- a/src/libcamera/base/shared_fd.cpp\n> +++ b/src/libcamera/base/shared_fd.cpp\n> @@ -253,6 +253,9 @@ SharedFD &SharedFD::operator=(SharedFD &&other)\n>   */\n>  UniqueFD SharedFD::dup() const\n>  {\n> +       if (!isValid())\n> +               return {};\n> +\n>         UniqueFD dupFd(::dup(get()));\n>         if (!dupFd.isValid()) {\n>                 int ret = -errno;\n> \n> base-commit: f8d2f17a3db5ac490d7b505253a98d6795c2b630\n> -- \n> Regards,\n> \n> Laurent Pinchart\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 146D2BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  6 Dec 2021 15:26:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3348D6086C;\n\tMon,  6 Dec 2021 16:26:31 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4C37460725\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  6 Dec 2021 16:26:30 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C71A3E6B;\n\tMon,  6 Dec 2021 16:26:29 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Du/BvCYz\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638804389;\n\tbh=0jTN0bVIBbM/tvIdsHfrSo+y5RBNzSt45Ditn+UvHNE=;\n\th=In-Reply-To:References:Subject:From:To:From;\n\tb=Du/BvCYzjw6U3p3eD9syv1McofSezmR3mQXrIOjKQ/7Q7NDSOu4nCvCJQBJ/T21sx\n\tN/ZS/xaXnmZOhVAdLxhGT8Ypop2QUeD3z+oqp+SeZJ+lZnxaFdBD5MOyC/aDZFeagF\n\tPdCpsgfdytKCq4BSm+fbRI2BdyCes+Xs2g/y1rRk=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20211206140701.19197-1-laurent.pinchart@ideasonboard.com>","References":"<20211206140701.19197-1-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>","Message-Id":"<20211206152631.3348D6086C@lancelot.ideasonboard.com>","Date":"Mon,  6 Dec 2021 16:26:31 +0100 (CET)"}},{"id":21610,"web_url":"https://patchwork.libcamera.org/comment/21610/","msgid":"<Ya4sgi3IyDNAa71z@pendragon.ideasonboard.com>","date":"2021-12-06T15:30:10","subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Dec 06, 2021 at 03:26:30PM +0000, Kieran Bingham wrote:\n> Quoting Laurent Pinchart (2021-12-06 14: 07:01)\n> > The SharedFD: :dup() implementation calls the C library dup() function on\n> Date: Mon, 06 Dec 2021 15:26:27 +0000\n> Message-ID: <163880438747.995700.268589314019276531@Monstersaurus>\n> User-Agent: alot/0.10\n> \n> > the fd. When the SharedFD instance is invalid, this produces an invalid\n> > fd, which is the correct behaviour, but logs an error message.\n> \n> Isn't logging an error in that event a reasonable thing to do?\n\nThere could be valid use cases for dup() on an invalid SharedFD, I'm not\nsure.\n\n> > Fix it by returning an invalid UniqueFD directly when the SharedFD is\n> > invalid. This also saves a system call, which is always nice to do.\n> \n> Saving that seems worthwhile anyway as we know it won't succeed.\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > Fixes: fcf98514cb4e (\"libcamera: base: file_descriptor: Return UniqueFD from dup()\")\n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> >  src/libcamera/base/shared_fd.cpp | 3 +++\n> >  1 file changed, 3 insertions(+)\n> > \n> > diff --git a/src/libcamera/base/shared_fd.cpp b/src/libcamera/base/shared_fd.cpp\n> > index bd2ab5aa25b7..c711cf579a04 100644\n> > --- a/src/libcamera/base/shared_fd.cpp\n> > +++ b/src/libcamera/base/shared_fd.cpp\n> > @@ -253,6 +253,9 @@ SharedFD &SharedFD::operator=(SharedFD &&other)\n> >   */\n> >  UniqueFD SharedFD::dup() const\n> >  {\n> > +       if (!isValid())\n> > +               return {};\n> > +\n> >         UniqueFD dupFd(::dup(get()));\n> >         if (!dupFd.isValid()) {\n> >                 int ret = -errno;\n> > \n> > base-commit: f8d2f17a3db5ac490d7b505253a98d6795c2b630","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 48B02BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  6 Dec 2021 15:30:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A19AA6086C;\n\tMon,  6 Dec 2021 16:30:40 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AAFF460725\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  6 Dec 2021 16:30:38 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 23679EE;\n\tMon,  6 Dec 2021 16:30:38 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"CVf7m6GY\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638804638;\n\tbh=GSQe4Z4WjyMblARjzhIBsRrzYHHJAHP+1TyWyqbrPFQ=;\n\th=Date:From:To:Cc:Subject:References:From;\n\tb=CVf7m6GYvVZcML+eAm1JGyh4bI5E4p+nguSt4qYTOgZDKdRv3TrKR2UoLXKXuVJGB\n\t8JTbl2fiQEZQeMXsLGMhKfYPklH91evgeN5LgEZE8zcNyBbOO02rJS2L58ik1f7Bik\n\tv3ZtSuh22IfkDD/PnXg0wBgkx7HvWO/mhPHL9N7w=","Date":"Mon, 6 Dec 2021 17:30:10 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<Ya4sgi3IyDNAa71z@pendragon.ideasonboard.com>","References":"<20211206140701.19197-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21649,"web_url":"https://patchwork.libcamera.org/comment/21649/","msgid":"<d4a08fda-9748-9299-10bb-098b28a16c3e@ideasonboard.com>","date":"2021-12-07T16:37:10","subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi,\n\nOn 12/6/21 7:37 PM, Laurent Pinchart wrote:\n> The SharedFD::dup() implementation calls the C library dup() function on\n> the fd. When the SharedFD instance is invalid, this produces an invalid\n> fd, which is the correct behaviour, but logs an error message.\n>\n> Fix it by returning an invalid UniqueFD directly when the SharedFD is\n> invalid. This also saves a system call, which is always nice to do.\n>\n> Fixes: fcf98514cb4e (\"libcamera: base: file_descriptor: Return UniqueFD from dup()\")\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>   src/libcamera/base/shared_fd.cpp | 3 +++\n>   1 file changed, 3 insertions(+)\n>\n> diff --git a/src/libcamera/base/shared_fd.cpp b/src/libcamera/base/shared_fd.cpp\n> index bd2ab5aa25b7..c711cf579a04 100644\n> --- a/src/libcamera/base/shared_fd.cpp\n> +++ b/src/libcamera/base/shared_fd.cpp\n> @@ -253,6 +253,9 @@ SharedFD &SharedFD::operator=(SharedFD &&other)\n>    */\n>   UniqueFD SharedFD::dup() const\n>   {\n> +\tif (!isValid())\n> +\t\treturn {};\n> +\n\n\nsimple enough\n\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n\n>   \tUniqueFD dupFd(::dup(get()));\n>   \tif (!dupFd.isValid()) {\n>   \t\tint ret = -errno;\n>\n> base-commit: f8d2f17a3db5ac490d7b505253a98d6795c2b630","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BD436BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Dec 2021 16:37:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0A3E16086A;\n\tTue,  7 Dec 2021 17:37:19 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B8CFF60592\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Dec 2021 17:37:17 +0100 (CET)","from [IPv6:2401:4900:1f3e:16f1:4e1b:f869:54d4:8c0c] (unknown\n\t[IPv6:2401:4900:1f3e:16f1:4e1b:f869:54d4:8c0c])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 55470556;\n\tTue,  7 Dec 2021 17:37:15 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"U4NN0/AD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638895037;\n\tbh=ObMz24VlQVwHsRh8x45XQtw8BD0H8II8a8ltfUK6Oxs=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=U4NN0/ADqwJ87M2+2ss/6jwH7kbhQ1gyC0HhxOjyk4DVi5e5bAXtrWXrdlLBRiU/c\n\tStATA4ZjJzshO3PTkzWtf8PA127iMzqgsc5hvwGAzrWJM/VvLaJjC8Z+Q1cvQ0OWfW\n\tFbOgdJydrVm+H8YcdSxkKm/kJ9Ey0iPnWGQvLMLE=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20211206140701.19197-1-laurent.pinchart@ideasonboard.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<d4a08fda-9748-9299-10bb-098b28a16c3e@ideasonboard.com>","Date":"Tue, 7 Dec 2021 22:07:10 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20211206140701.19197-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH] libcamera: base: shared_fd: Don't\n\tdup() an invalid fd","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]