[{"id":26488,"web_url":"https://patchwork.libcamera.org/comment/26488/","msgid":"<Y/2jK5ddAAQ/dhmb@pyrite.rasen.tech>","date":"2023-02-28T06:46:03","subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Mon, Feb 27, 2023 at 08:39:47PM +0000, Kieran Bingham via libcamera-devel wrote:\n> Handling ioctl's within applications is often wrapped with a helper such\n> as xioctl. Unfortunately, there are many instances of xioctl which\n> incorrectly handle the correct size of the ioctl request.\n> \n> This leads to incorrect sign-extension of ioctl's which have bit-31 set,\n> and can cause values to be passed into the libcamera's v4l2 adaptation\n> layer which no longer represent the true IOCTL code.\n> \n> We can easily identify if an application has mistakenly sign-extended an\n> ioctl command request and mask out those bits.\n> \n> Do so and report the error loudly, but only once that the application\n> should be fixed.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n> \n> This is a pain. It's not 'libcamera's' fault. But we can do something\n> about it.\n\nWelp :/\n\nYeah we can do something about it. I see a future where the error gets\nignored because it \"still works\" though.\n\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> \n> See\n>  - https://github.com/kbingham/libcamera/issues/69\n> and\n>  - https://github.com/Motion-Project/motion/discussions/1636\n> \n> \n> \n>  src/v4l2/v4l2_camera_proxy.cpp | 18 ++++++++++++++++++\n>  1 file changed, 18 insertions(+)\n> \n> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp\n> index 55ff62cdb430..75c53aedf2fa 100644\n> --- a/src/v4l2/v4l2_camera_proxy.cpp\n> +++ b/src/v4l2/v4l2_camera_proxy.cpp\n> @@ -782,6 +782,24 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, void *ar\n>  {\n>  \tMutexLocker locker(proxyMutex_);\n>  \n> +\t/*\n> +\t * Applications may easily find themselves incorrectly sign-extending\n> +\t * ioctls on 64-bit systems which can cause hard to diagnose failures\n> +\t * with the v4l2-adatation layer. Identify this failure, and work\n> +\t * around it - but report the issue as it should be fixed in the\n> +\t * application.\n> +\t */\n> +\tif (request & 0xffffffff00000000) {\n> +\t\tstatic bool warnOnce = true;\n> +\n> +\t\tif (warnOnce) {\n> +\t\t\tLOG(V4L2Compat, Error) << \"ioctl sign extension detected.\";\n> +\t\t\tLOG(V4L2Compat, Error) << \"Please fix your application.\";\n> +\t\t\twarnOnce = false;\n> +\t\t}\n> +\t\trequest &= 0xffffffff;\n> +\t}\n> +\n>  \tif (!arg && (_IOC_DIR(request) & _IOC_WRITE)) {\n>  \t\terrno = EFAULT;\n>  \t\treturn -1;\n> -- \n> 2.34.1\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 71749BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Feb 2023 06:46:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D349462684;\n\tTue, 28 Feb 2023 07:46:11 +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 2567262676\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Feb 2023 07:46:10 +0100 (CET)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BE41256A;\n\tTue, 28 Feb 2023 07:46:08 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1677566771;\n\tbh=J9QwkwMbSH49sttY3NoRKrMI8H0kjECy0i1WWzBYFk8=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=C4l594hfPkmsCY1QbDv64juj0MN+0Ob7sbk0NzOIR8gYWqT0DW2fXkpNTFUX+MJ/8\n\tF9R6azeH+f5F0qq+B1CYONYSf1ZbtGE4LYJfLUgHXtrM8aC7UDjkOEnkgI/Jctw49h\n\t+fJn7Bnx/2SV+p1BApCjwROoX8+L7pX4+6Cj9ZCC18Tb2GDdtSTeIvtjaL48m4cabs\n\t+RAbVVYIm4veigi2IMD1SCFOifJXbz4gWmA5KWM/ydoZboakW+Sb1Fg3jyYUsaXVO3\n\tcmvjrJQ8789f8qMsRHWA87GWbXVCcg1BL126cEbzyvxohqdzCq1N55zUZd3GdcYjTq\n\t/ZKN3rYKyR9Vg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1677566769;\n\tbh=J9QwkwMbSH49sttY3NoRKrMI8H0kjECy0i1WWzBYFk8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=RvEcSRNagOaELoZolruD8f/sQLdsDr72Xc3bY0PyP9BD9sO1ze/VN9WQQZJLHRCO5\n\twr0T2/G1oW4Npn5B28IaFwpDopjgz/5lodEeevvKdH7KlUq4rQOvJB1EycWYWVuLWm\n\tsNf4QadY3MW2JsdDF99tmXLnqXAostdTQeXqIHfc="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"RvEcSRNa\"; dkim-atps=neutral","Date":"Tue, 28 Feb 2023 15:46:03 +0900","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<Y/2jK5ddAAQ/dhmb@pyrite.rasen.tech>","References":"<20230227203947.3964157-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20230227203947.3964157-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","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>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26505,"web_url":"https://patchwork.libcamera.org/comment/26505/","msgid":"<Y/6SZNeC4360JX59@pendragon.ideasonboard.com>","date":"2023-02-28T23:46:44","subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nThank you for the patch.\n\nOn Mon, Feb 27, 2023 at 08:39:47PM +0000, Kieran Bingham via libcamera-devel wrote:\n> Handling ioctl's within applications is often wrapped with a helper such\n> as xioctl. Unfortunately, there are many instances of xioctl which\n> incorrectly handle the correct size of the ioctl request.\n>\n> This leads to incorrect sign-extension of ioctl's which have bit-31 set,\n> and can cause values to be passed into the libcamera's v4l2 adaptation\n> layer which no longer represent the true IOCTL code.\n> \n> We can easily identify if an application has mistakenly sign-extended an\n> ioctl command request and mask out those bits.\n> \n> Do so and report the error loudly, but only once that the application\n> should be fixed.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n> \n> This is a pain. It's not 'libcamera's' fault. But we can do something\n> about it.\n> \n> See\n>  - https://github.com/kbingham/libcamera/issues/69\n> and\n>  - https://github.com/Motion-Project/motion/discussions/1636\n>\n>  src/v4l2/v4l2_camera_proxy.cpp | 18 ++++++++++++++++++\n>  1 file changed, 18 insertions(+)\n> \n> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp\n> index 55ff62cdb430..75c53aedf2fa 100644\n> --- a/src/v4l2/v4l2_camera_proxy.cpp\n> +++ b/src/v4l2/v4l2_camera_proxy.cpp\n> @@ -782,6 +782,24 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, void *ar\n>  {\n>  \tMutexLocker locker(proxyMutex_);\n>  \n> +\t/*\n> +\t * Applications may easily find themselves incorrectly sign-extending\n> +\t * ioctls on 64-bit systems which can cause hard to diagnose failures\n> +\t * with the v4l2-adatation layer. Identify this failure, and work\n\ns/adatation/adaptation/\n\n> +\t * around it - but report the issue as it should be fixed in the\n> +\t * application.\n\nAs far as I understand, the kernel drops the upper 32 bits (see\nfs/ioctl.c which defines the ioctl syscall handler with an unsigned int\ncmd argument). I suppose it's nice to hint that sign extension isn't a\ngreat idea, but I'm not sure this can be considered an application\nerror. You may want to adjust the comment accordingly (and keep in mind\nI may well be wrong about the whole thing :-)).\n\n> +\t */\n> +\tif (request & 0xffffffff00000000) {\n> +\t\tstatic bool warnOnce = true;\n> +\n> +\t\tif (warnOnce) {\n> +\t\t\tLOG(V4L2Compat, Error) << \"ioctl sign extension detected.\";\n> +\t\t\tLOG(V4L2Compat, Error) << \"Please fix your application.\";\n\nYou could write this in a single message.\n\n> +\t\t\twarnOnce = false;\n> +\t\t}\n> +\t\trequest &= 0xffffffff;\n> +\t}\n> +\n>  \tif (!arg && (_IOC_DIR(request) & _IOC_WRITE)) {\n>  \t\terrno = EFAULT;\n>  \t\treturn -1;","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 58EBFBE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Feb 2023 23:46:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A07DE626AE;\n\tWed,  1 Mar 2023 00:46:44 +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 E106362691\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Mar 2023 00:46:43 +0100 (CET)","from pendragon.ideasonboard.com\n\t(153.162-64-87.adsl-dyn.isp.belgacom.be [87.64.162.153])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 55C51890;\n\tWed,  1 Mar 2023 00:46:43 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1677628004;\n\tbh=NAlfIiEJV51w68xh7hQgV+mPHNaS030tmMUX5Jqhlmc=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=HfMRENIwet5N92igRFN4Mak2W6Rd9EZOHv96HPyydLIM9WsDoEpI0euDb8C+17QfE\n\tNj4uBYo7AU0q6A4A+Bd4KQxiAUrQeyi+jMW60vS2/CNek4sG5tPnA882DXVUMHxGIs\n\td/KKtXAq7K4TZEED9dSxEYwsROFy76IhqK/J1BfhF06BKWCYZLMOlx4GI+Dh63VLEQ\n\tC3HFGQ/uv5KC/C+qA4PCkZVKxHY07XO6dATIzRM/evMrDwbPernNYUfxoArpMIJ3Iu\n\t1a2MH12jKmgastskbE/Op1Uq3vGMllLSetnO4UlJCCI0WD+ze5bacqsDtAcp6r/i6d\n\tVgq/0yPs+JOsA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1677628003;\n\tbh=NAlfIiEJV51w68xh7hQgV+mPHNaS030tmMUX5Jqhlmc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=JgC3r8hVtfwThUF6VvlyAEhJylSM+8gQCVUzvRf8li+xpdtPrk/zBLlRQx//W4UDU\n\tx1j8ukjDWlOzMRPSIliaGqf3ujO/NiADNqeJfvA41z0OekgOUBxY38K2RemCZX3DFJ\n\tY1umCfREuVSXXV42Vzuga6N6OfdwM5MdnLbJXuhE="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"JgC3r8hV\"; dkim-atps=neutral","Date":"Wed, 1 Mar 2023 01:46:44 +0200","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<Y/6SZNeC4360JX59@pendragon.ideasonboard.com>","References":"<20230227203947.3964157-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230227203947.3964157-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26511,"web_url":"https://patchwork.libcamera.org/comment/26511/","msgid":"<21c91bfa-70f0-1718-d0a9-05e06fa516a4@ideasonboard.com>","date":"2023-03-01T13:06:41","subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 28/02/2023 23:46, Laurent Pinchart wrote:\n> Hi Kieran,\n> \n> Thank you for the patch.\n> \n> On Mon, Feb 27, 2023 at 08:39:47PM +0000, Kieran Bingham via libcamera-devel wrote:\n>> Handling ioctl's within applications is often wrapped with a helper such\n>> as xioctl. Unfortunately, there are many instances of xioctl which\n>> incorrectly handle the correct size of the ioctl request.\n>>\n>> This leads to incorrect sign-extension of ioctl's which have bit-31 set,\n>> and can cause values to be passed into the libcamera's v4l2 adaptation\n>> layer which no longer represent the true IOCTL code.\n>>\n>> We can easily identify if an application has mistakenly sign-extended an\n>> ioctl command request and mask out those bits.\n>>\n>> Do so and report the error loudly, but only once that the application\n>> should be fixed.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>\n>> This is a pain. It's not 'libcamera's' fault. But we can do something\n>> about it.\n>>\n>> See\n>>   - https://github.com/kbingham/libcamera/issues/69\n>> and\n>>   - https://github.com/Motion-Project/motion/discussions/1636\n>>\n>>   src/v4l2/v4l2_camera_proxy.cpp | 18 ++++++++++++++++++\n>>   1 file changed, 18 insertions(+)\n>>\n>> diff --git a/src/v4l2/v4l2_camera_proxy.cpp b/src/v4l2/v4l2_camera_proxy.cpp\n>> index 55ff62cdb430..75c53aedf2fa 100644\n>> --- a/src/v4l2/v4l2_camera_proxy.cpp\n>> +++ b/src/v4l2/v4l2_camera_proxy.cpp\n>> @@ -782,6 +782,24 @@ int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, void *ar\n>>   {\n>>   \tMutexLocker locker(proxyMutex_);\n>>   \n>> +\t/*\n>> +\t * Applications may easily find themselves incorrectly sign-extending\n>> +\t * ioctls on 64-bit systems which can cause hard to diagnose failures\n>> +\t * with the v4l2-adatation layer. Identify this failure, and work\n> \n> s/adatation/adaptation/\n> \n>> +\t * around it - but report the issue as it should be fixed in the\n>> +\t * application.\n> \n> As far as I understand, the kernel drops the upper 32 bits (see\n> fs/ioctl.c which defines the ioctl syscall handler with an unsigned int\n> cmd argument). I suppose it's nice to hint that sign extension isn't a\n> great idea, but I'm not sure this can be considered an application\n> error. You may want to adjust the comment accordingly (and keep in mind\n> I may well be wrong about the whole thing :-)).\n\nIt's confusing, and I was looking for somewhere explicitly masking out \nthe bits - I'd missed that it just gets ignored/masked by the \ncompiler/interfaces because that's the type on the argument.\n\nman ioctl, definitely states that ioctl() takes an unsigned long... so \nwe can't change our args.\n\nMaybe even silently masking is fine. But I'm happier in this small case \nto report it\n\n\n>> +\t */\n>> +\tif (request & 0xffffffff00000000) {\n\nI fear that being invalid or inefficient on 32 bit platforms though. /o\\\n\nAnd we can probably simplify all of this with something more like:\n\n-int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long request, \nvoid *arg)\n+int V4L2CameraProxy::ioctl(V4L2CameraFile *file, unsigned long longReq, \nvoid *arg)\n  {\n         MutexLocker locker(proxyMutex_);\n\n+       /*\n+        * The Linux Kernel only processes 32 bits of an IOCTL.\n+        *\n+        * Prevent unexpected sign-extensions that could occur if \napplications\n+        * use an unsigned int for the ioctl request, which would \nsign-extend\n+        * to an incorrect value for unsigned longs on 64 bit \narchitectures by\n+        * explicitly casting as an unsigned int here.\n+        */\n+       unsigned int request = longReq;\n+\n\n\n>> +\t\tstatic bool warnOnce = true;\n>> +\n>> +\t\tif (warnOnce) {\n>> +\t\t\tLOG(V4L2Compat, Error) << \"ioctl sign extension detected.\";\n>> +\t\t\tLOG(V4L2Compat, Error) << \"Please fix your application.\";\n> \n> You could write this in a single message.\n\nI did that intentionally, but I'll keep the first line, and drop the second.\n\nOr move to the unsigned int request type and remove the warning all \ntogether...\n\n\n> \n>> +\t\t\twarnOnce = false;\n>> +\t\t}\n>> +\t\trequest &= 0xffffffff;\n>> +\t}\n>> +\n>>   \tif (!arg && (_IOC_DIR(request) & _IOC_WRITE)) {\n>>   \t\terrno = EFAULT;\n>>   \t\treturn -1;\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 DFA9DBE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  1 Mar 2023 13:06:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4E61162666;\n\tWed,  1 Mar 2023 14:06:43 +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 319F862665\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Mar 2023 14:06:42 +0100 (CET)","from [192.168.0.32]\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 A77D3890;\n\tWed,  1 Mar 2023 14:06:41 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1677676003;\n\tbh=2X4P7nzuxn4pj8mp2ndzqGu6j0ZcK2kMcueyghQIAps=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=Zx//YzoBEn/YcHfXZ6Qafc0MdTTBgJp9EQEMS+b2Tt5E9WhIfSH7Ap0Fgkl4aH21/\n\tPAccM1xWhyy33cdOfJW0ylAQ92NSE99/0DMCTf7r6odnJXcxVvH1Tl3W0i+Q1lNYga\n\t85bJ0cdksQHnSlUmSStIYYnnG6r/lwvwQf4DuPPwEWrvsiOOjQM1icKoEwbpSwuxvY\n\tBMaSgM9Nw7teMp04RsSDXzfC5WzWFBt9eVgxooyf9cuBkHTbE1XrKlt6lKMorExKoC\n\t0upVb2WluPKVjL0M2ZBCJ7LjE3Di9xnWEneuBFNRDU8fHzZqQV88g4U7S/LAIi5yZY\n\t0iK2bvfs2TP1g==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1677676001;\n\tbh=2X4P7nzuxn4pj8mp2ndzqGu6j0ZcK2kMcueyghQIAps=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=SZZtM7Y8FD+XUvelg78Nr5+J1rC4hY/KyghCI2La/Q6aodBnisdR2w42r7zAuwBIn\n\tKRuA2UTYodvtzBsKsfHx5QQ8jCYR0D7nPsna1I6b5kZdP7b8NXFcHQae0y3f1Tvuj2\n\tA5wiGxDF46ve3R5MDJLyaNfjJ/zPR+3LbWPtRNms="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"SZZtM7Y8\"; dkim-atps=neutral","Message-ID":"<21c91bfa-70f0-1718-d0a9-05e06fa516a4@ideasonboard.com>","Date":"Wed, 1 Mar 2023 13:06:41 +0000","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.7.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20230227203947.3964157-1-kieran.bingham@ideasonboard.com>\n\t<Y/6SZNeC4360JX59@pendragon.ideasonboard.com>","In-Reply-To":"<Y/6SZNeC4360JX59@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] v4l2: v4l2_camera_proxy: Detect ioctl\n\tsign-extensions","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>","From":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]