[{"id":3807,"web_url":"https://patchwork.libcamera.org/comment/3807/","msgid":"<20200218151708.GF4828@pendragon.ideasonboard.com>","date":"2020-02-18T15:17:08","subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","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 Tue, Feb 18, 2020 at 02:18:39PM +0000, Kieran Bingham wrote:\n> The conversion of pointers to integers is implementation defined and\n> differs between g++ and clang++ when utilising a uint64_t type.\n> \n>     #include <iostream>\n> \n>     int main(int argc, char **argv)\n>     {\n>         void *ptr = reinterpret_cast<void *>(0xf1234567);\n>         uint64_t u64 = reinterpret_cast<uint64_t>(ptr);\n> \tuint64_t uint64 = reinterpret_cast<uintptr_t>(ptr);\n> \n>         std::cout << \"ptr \" << ptr\n> \t\t  << \" u64 0x\" << std::hex << u64\n> \t\t  << \" uint64 0x\" << std::hex << uint64\n\nMaybe \" ptr -> u64 0x\" and \" ptr -> uintptr_t -> u64 0x\" ?\n\n> \t\t  << std::endl;\n> \n> \treturn 0;\n>     }\n\nThat's a weird mix of tabs and spaces :-)\n\n> \n> When compiled with g++ produces the following unexpected output:\n\ns/with g++/with g++ for a 32-bit platform/\n\n> \n>   ptr 0xf1234567 u64 0xfffffffff1234567 uint64 0xf1234567\n> \n> The standards states:\n> \n> \"A pointer can be explicitly converted to any integral type large enough\n> to hold all values of its type. The mapping function is\n> implementation-defined. [Note: It is intended to be unsurprising to\n> those who know the addressing structure of the underlying machine. — end\n> note]\"\n> \n> And as such the g++ implementation appears to be little more surprising\n> than expected in this situation.\n> \n> The MediaDevice passes pointers to the kernel via the struct\n> media_v2_topology in which pointers are cast using a uint64 type (__u64),\n> which is affected by the sign extension described above when BIT(32) is\n> set and causes an invalid address to be given to the kernel.\n> \n> Ensure that we cast using uintptr_t which is not affected by the sign\n> extension issue.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n> v2:\n>  - Expand commit message to explain the underlying issue.\n>  - include stdint.h\n>  - use uintptr_t instead of std::uintptr_t\n> \n>  src/libcamera/media_device.cpp | 9 +++++----\n>  1 file changed, 5 insertions(+), 4 deletions(-)\n> \n> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n> index fad475b9ac76..0d6b5efd9e7a 100644\n> --- a/src/libcamera/media_device.cpp\n> +++ b/src/libcamera/media_device.cpp\n> @@ -9,6 +9,7 @@\n>  \n>  #include <errno.h>\n>  #include <fcntl.h>\n> +#include <stdint.h>\n>  #include <string>\n>  #include <string.h>\n>  #include <sys/ioctl.h>\n> @@ -236,10 +237,10 @@ int MediaDevice::populate()\n>  \t */\n>  \twhile (true) {\n>  \t\ttopology.topology_version = 0;\n> -\t\ttopology.ptr_entities = reinterpret_cast<__u64>(ents);\n> -\t\ttopology.ptr_interfaces = reinterpret_cast<__u64>(interfaces);\n> -\t\ttopology.ptr_links = reinterpret_cast<__u64>(links);\n> -\t\ttopology.ptr_pads = reinterpret_cast<__u64>(pads);\n> +\t\ttopology.ptr_entities = reinterpret_cast<uintptr_t>(ents);\n> +\t\ttopology.ptr_interfaces = reinterpret_cast<uintptr_t>(interfaces);\n> +\t\ttopology.ptr_links = reinterpret_cast<uintptr_t>(links);\n> +\t\ttopology.ptr_pads = reinterpret_cast<uintptr_t>(pads);\n>  \n>  \t\tret = ioctl(fd_, MEDIA_IOC_G_TOPOLOGY, &topology);\n>  \t\tif (ret < 0) {","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["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 892EB60837\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 18 Feb 2020 16:17:27 +0100 (CET)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E3E572F9;\n\tTue, 18 Feb 2020 16:17:26 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1582039047;\n\tbh=2bvaRRoTHBnm5g5xZVOE/jBGPR4Ul9d/dXJ3Lbu+oWo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=pm5Gatad2HAViQPb0EzWQqcSwPmw+8/E8ZAuPC51fRrs/WwKYyPR2+VgV2WC941ko\n\tzPqJX9r3zSZc0VlXpaprjiGpg88JrxVvgagSdAS4ixvXmylIHCakVAAuMfflSaEFeg\n\tTZwfanN2Dt39PJ/UWgbWFOpKgWRLNB2L80zeL4bI=","Date":"Tue, 18 Feb 2020 17:17:08 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20200218151708.GF4828@pendragon.ideasonboard.com>","References":"<20200218141839.5574-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20200218141839.5574-1-kieran.bingham@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","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>","X-List-Received-Date":"Tue, 18 Feb 2020 15:17:27 -0000"}},{"id":3808,"web_url":"https://patchwork.libcamera.org/comment/3808/","msgid":"<05c5c08d-3328-9f44-6bad-26fea9811d32@ideasonboard.com>","date":"2020-02-18T17:07:41","subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 18/02/2020 15:17, Laurent Pinchart wrote:\n> Hi Kieran,\n> \n> Thank you for the patch.\n> \n> On Tue, Feb 18, 2020 at 02:18:39PM +0000, Kieran Bingham wrote:\n>> The conversion of pointers to integers is implementation defined and\n>> differs between g++ and clang++ when utilising a uint64_t type.\n>>\n>>     #include <iostream>\n>>\n>>     int main(int argc, char **argv)\n>>     {\n>>         void *ptr = reinterpret_cast<void *>(0xf1234567);\n>>         uint64_t u64 = reinterpret_cast<uint64_t>(ptr);\n>> \tuint64_t uint64 = reinterpret_cast<uintptr_t>(ptr);\n>>\n>>         std::cout << \"ptr \" << ptr\n>> \t\t  << \" u64 0x\" << std::hex << u64\n>> \t\t  << \" uint64 0x\" << std::hex << uint64\n> \n> Maybe \" ptr -> u64 0x\" and \" ptr -> uintptr_t -> u64 0x\" ?\n> \n>> \t\t  << std::endl;\n>>\n>> \treturn 0;\n>>     }\n> \n> That's a weird mix of tabs and spaces :-)\n\nAgh, I indented the left hand items by 4 to indent the whole code block\nfor the commit message.\n\nIndenting the whole lot by a tab fits, but it looks a bit weird and too\nfar to the right ... but I don't think it's important.\n\n\n> \n>>\n>> When compiled with g++ produces the following unexpected output:\n> \n> s/with g++/with g++ for a 32-bit platform/\n\nNo, I don't think that's true.\nThis issue affects a 64-bit platform just the same.\n\nIf a pointer is passed through here which happens to be\n0x00000000f1234567, it will be incorrect when it gets to the kernel.\n\n(or any pointer with leading zeros up to a set bit 32...)\n\n>>   ptr 0xf1234567 u64 0xfffffffff1234567 uint64 0xf1234567\n>>\n>> The standards states:\n>>\n>> \"A pointer can be explicitly converted to any integral type large enough\n>> to hold all values of its type. The mapping function is\n>> implementation-defined. [Note: It is intended to be unsurprising to\n>> those who know the addressing structure of the underlying machine. — end\n>> note]\"\n>>\n>> And as such the g++ implementation appears to be little more surprising\n>> than expected in this situation.\n>>\n>> The MediaDevice passes pointers to the kernel via the struct\n>> media_v2_topology in which pointers are cast using a uint64 type (__u64),\n>> which is affected by the sign extension described above when BIT(32) is\n>> set and causes an invalid address to be given to the kernel.\n>>\n>> Ensure that we cast using uintptr_t which is not affected by the sign\n>> extension issue.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n>> ---\n>> v2:\n>>  - Expand commit message to explain the underlying issue.\n>>  - include stdint.h\n>>  - use uintptr_t instead of std::uintptr_t\n>>\n>>  src/libcamera/media_device.cpp | 9 +++++----\n>>  1 file changed, 5 insertions(+), 4 deletions(-)\n>>\n>> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n>> index fad475b9ac76..0d6b5efd9e7a 100644\n>> --- a/src/libcamera/media_device.cpp\n>> +++ b/src/libcamera/media_device.cpp\n>> @@ -9,6 +9,7 @@\n>>  \n>>  #include <errno.h>\n>>  #include <fcntl.h>\n>> +#include <stdint.h>\n>>  #include <string>\n>>  #include <string.h>\n>>  #include <sys/ioctl.h>\n>> @@ -236,10 +237,10 @@ int MediaDevice::populate()\n>>  \t */\n>>  \twhile (true) {\n>>  \t\ttopology.topology_version = 0;\n>> -\t\ttopology.ptr_entities = reinterpret_cast<__u64>(ents);\n>> -\t\ttopology.ptr_interfaces = reinterpret_cast<__u64>(interfaces);\n>> -\t\ttopology.ptr_links = reinterpret_cast<__u64>(links);\n>> -\t\ttopology.ptr_pads = reinterpret_cast<__u64>(pads);\n>> +\t\ttopology.ptr_entities = reinterpret_cast<uintptr_t>(ents);\n>> +\t\ttopology.ptr_interfaces = reinterpret_cast<uintptr_t>(interfaces);\n>> +\t\ttopology.ptr_links = reinterpret_cast<uintptr_t>(links);\n>> +\t\ttopology.ptr_pads = reinterpret_cast<uintptr_t>(pads);\n>>  \n>>  \t\tret = ioctl(fd_, MEDIA_IOC_G_TOPOLOGY, &topology);\n>>  \t\tif (ret < 0) {\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["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 5EBDA60837\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 18 Feb 2020 18:07:44 +0100 (CET)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BA4DD2F9;\n\tTue, 18 Feb 2020 18:07:43 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1582045663;\n\tbh=eEttKgYN0FvE9fcTLlyaqJTjPMNGuze5yyz+3qKImHQ=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=WdsS0NiD4cvTWXt+8knwonmdpSSfJC3MeqJhqJ9cM+h36S4e9BWjlC+NPZg28RF3U\n\tcF7fBJACfo8pSxtqukTmkhYry5nngxU1eaufLzfB6T1jOnJWpfCBsJ1E4vpticrd6S\n\tf68Qky5C/HHdHxYzzYsZYvGOVTzg4QeDxyDaHgtc=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","References":"<20200218141839.5574-1-kieran.bingham@ideasonboard.com>\n\t<20200218151708.GF4828@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<05c5c08d-3328-9f44-6bad-26fea9811d32@ideasonboard.com>","Date":"Tue, 18 Feb 2020 17:07:41 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.9.1","MIME-Version":"1.0","In-Reply-To":"<20200218151708.GF4828@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","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>","X-List-Received-Date":"Tue, 18 Feb 2020 17:07:44 -0000"}},{"id":3810,"web_url":"https://patchwork.libcamera.org/comment/3810/","msgid":"<20200218173358.GG4828@pendragon.ideasonboard.com>","date":"2020-02-18T17:33:58","subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Tue, Feb 18, 2020 at 05:07:41PM +0000, Kieran Bingham wrote:\n> On 18/02/2020 15:17, Laurent Pinchart wrote:\n> > On Tue, Feb 18, 2020 at 02:18:39PM +0000, Kieran Bingham wrote:\n> >> The conversion of pointers to integers is implementation defined and\n> >> differs between g++ and clang++ when utilising a uint64_t type.\n> >>\n> >>     #include <iostream>\n> >>\n> >>     int main(int argc, char **argv)\n> >>     {\n> >>         void *ptr = reinterpret_cast<void *>(0xf1234567);\n> >>         uint64_t u64 = reinterpret_cast<uint64_t>(ptr);\n> >> \tuint64_t uint64 = reinterpret_cast<uintptr_t>(ptr);\n> >>\n> >>         std::cout << \"ptr \" << ptr\n> >> \t\t  << \" u64 0x\" << std::hex << u64\n> >> \t\t  << \" uint64 0x\" << std::hex << uint64\n> > \n> > Maybe \" ptr -> u64 0x\" and \" ptr -> uintptr_t -> u64 0x\" ?\n> > \n> >> \t\t  << std::endl;\n> >>\n> >> \treturn 0;\n> >>     }\n> > \n> > That's a weird mix of tabs and spaces :-)\n> \n> Agh, I indented the left hand items by 4 to indent the whole code block\n> for the commit message.\n> \n> Indenting the whole lot by a tab fits, but it looks a bit weird and too\n> far to the right ... but I don't think it's important.\n\nNo big deal, no. I was however referring to lines starting with\n\"uint64_t uint64\" and \"return\" that seem to have a different combination\nof spaces and tabs than the other ones.\n\n> >> When compiled with g++ produces the following unexpected output:\n> > \n> > s/with g++/with g++ for a 32-bit platform/\n> \n> No, I don't think that's true.\n> This issue affects a 64-bit platform just the same.\n> \n> If a pointer is passed through here which happens to be\n> 0x00000000f1234567, it will be incorrect when it gets to the kernel.\n> \n> (or any pointer with leading zeros up to a set bit 32...)\n\nReally ? Testing the above code on x86-64 without -m32 prints\n\nptr 0xf1234567 u64 0xf1234567 uint64 0xf1234567\n\nfor me.\n\n> >>   ptr 0xf1234567 u64 0xfffffffff1234567 uint64 0xf1234567\n> >>\n> >> The standards states:\n> >>\n> >> \"A pointer can be explicitly converted to any integral type large enough\n> >> to hold all values of its type. The mapping function is\n> >> implementation-defined. [Note: It is intended to be unsurprising to\n> >> those who know the addressing structure of the underlying machine. — end\n> >> note]\"\n> >>\n> >> And as such the g++ implementation appears to be little more surprising\n> >> than expected in this situation.\n> >>\n> >> The MediaDevice passes pointers to the kernel via the struct\n> >> media_v2_topology in which pointers are cast using a uint64 type (__u64),\n> >> which is affected by the sign extension described above when BIT(32) is\n> >> set and causes an invalid address to be given to the kernel.\n> >>\n> >> Ensure that we cast using uintptr_t which is not affected by the sign\n> >> extension issue.\n> >>\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > \n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > \n> >> ---\n> >> v2:\n> >>  - Expand commit message to explain the underlying issue.\n> >>  - include stdint.h\n> >>  - use uintptr_t instead of std::uintptr_t\n> >>\n> >>  src/libcamera/media_device.cpp | 9 +++++----\n> >>  1 file changed, 5 insertions(+), 4 deletions(-)\n> >>\n> >> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n> >> index fad475b9ac76..0d6b5efd9e7a 100644\n> >> --- a/src/libcamera/media_device.cpp\n> >> +++ b/src/libcamera/media_device.cpp\n> >> @@ -9,6 +9,7 @@\n> >>  \n> >>  #include <errno.h>\n> >>  #include <fcntl.h>\n> >> +#include <stdint.h>\n> >>  #include <string>\n> >>  #include <string.h>\n> >>  #include <sys/ioctl.h>\n> >> @@ -236,10 +237,10 @@ int MediaDevice::populate()\n> >>  \t */\n> >>  \twhile (true) {\n> >>  \t\ttopology.topology_version = 0;\n> >> -\t\ttopology.ptr_entities = reinterpret_cast<__u64>(ents);\n> >> -\t\ttopology.ptr_interfaces = reinterpret_cast<__u64>(interfaces);\n> >> -\t\ttopology.ptr_links = reinterpret_cast<__u64>(links);\n> >> -\t\ttopology.ptr_pads = reinterpret_cast<__u64>(pads);\n> >> +\t\ttopology.ptr_entities = reinterpret_cast<uintptr_t>(ents);\n> >> +\t\ttopology.ptr_interfaces = reinterpret_cast<uintptr_t>(interfaces);\n> >> +\t\ttopology.ptr_links = reinterpret_cast<uintptr_t>(links);\n> >> +\t\ttopology.ptr_pads = reinterpret_cast<uintptr_t>(pads);\n> >>  \n> >>  \t\tret = ioctl(fd_, MEDIA_IOC_G_TOPOLOGY, &topology);\n> >>  \t\tif (ret < 0) {","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["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 660FF61F5F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 18 Feb 2020 18:34:18 +0100 (CET)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6DE5D2F9;\n\tTue, 18 Feb 2020 18:34:17 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1582047258;\n\tbh=KEgU7SY6XsC1L+Y47K+NEARTEzZOlt6RaRkzCnfimJQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Mpxnz5UKMVwIudz+X1jfyv3XoIdfs5EAwacDUK3TiEMfEyWXB5oyvMGfyaVBSb/oS\n\t91ePBtS2qRbMbRwt1Tf6ETQfI6XzVaQTK5NcZleTA//GKNXUdCH2q3kcnpTbMck5us\n\tQH52CP3F2dTefcbO4Ctl0ybJNqIUAoGSXSi6pwGg=","Date":"Tue, 18 Feb 2020 19:33:58 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20200218173358.GG4828@pendragon.ideasonboard.com>","References":"<20200218141839.5574-1-kieran.bingham@ideasonboard.com>\n\t<20200218151708.GF4828@pendragon.ideasonboard.com>\n\t<05c5c08d-3328-9f44-6bad-26fea9811d32@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<05c5c08d-3328-9f44-6bad-26fea9811d32@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","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>","X-List-Received-Date":"Tue, 18 Feb 2020 17:34:18 -0000"}},{"id":3811,"web_url":"https://patchwork.libcamera.org/comment/3811/","msgid":"<40af94f2-c95c-4efc-7e05-78512229347f@ideasonboard.com>","date":"2020-02-18T17:38:27","subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 18/02/2020 17:33, Laurent Pinchart wrote:\n> Hi Kieran,\n> \n> On Tue, Feb 18, 2020 at 05:07:41PM +0000, Kieran Bingham wrote:\n>> On 18/02/2020 15:17, Laurent Pinchart wrote:\n>>> On Tue, Feb 18, 2020 at 02:18:39PM +0000, Kieran Bingham wrote:\n>>>> The conversion of pointers to integers is implementation defined and\n>>>> differs between g++ and clang++ when utilising a uint64_t type.\n>>>>\n>>>>     #include <iostream>\n>>>>\n>>>>     int main(int argc, char **argv)\n>>>>     {\n>>>>         void *ptr = reinterpret_cast<void *>(0xf1234567);\n>>>>         uint64_t u64 = reinterpret_cast<uint64_t>(ptr);\n>>>> \tuint64_t uint64 = reinterpret_cast<uintptr_t>(ptr);\n>>>>\n>>>>         std::cout << \"ptr \" << ptr\n>>>> \t\t  << \" u64 0x\" << std::hex << u64\n>>>> \t\t  << \" uint64 0x\" << std::hex << uint64\n>>>\n>>> Maybe \" ptr -> u64 0x\" and \" ptr -> uintptr_t -> u64 0x\" ?\n>>>\n>>>> \t\t  << std::endl;\n>>>>\n>>>> \treturn 0;\n>>>>     }\n>>>\n>>> That's a weird mix of tabs and spaces :-)\n>>\n>> Agh, I indented the left hand items by 4 to indent the whole code block\n>> for the commit message.\n>>\n>> Indenting the whole lot by a tab fits, but it looks a bit weird and too\n>> far to the right ... but I don't think it's important.\n> \n> No big deal, no. I was however referring to lines starting with\n> \"uint64_t uint64\" and \"return\" that seem to have a different combination\n> of spaces and tabs than the other ones.\n> \n>>>> When compiled with g++ produces the following unexpected output:\n>>>\n>>> s/with g++/with g++ for a 32-bit platform/\n>>\n>> No, I don't think that's true.\n>> This issue affects a 64-bit platform just the same.\n>>\n>> If a pointer is passed through here which happens to be\n>> 0x00000000f1234567, it will be incorrect when it gets to the kernel.\n>>\n>> (or any pointer with leading zeros up to a set bit 32...)\n> \n> Really ? Testing the above code on x86-64 without -m32 prints\n> \n> ptr 0xf1234567 u64 0xf1234567 uint64 0xf1234567\n> \n> for me.\n\nAh, I /may/ have been building the snippit code on the target, when I\nthought I had done it on the host... :-D\n\nI.e. I hadn't specified -m32 'explicitly' ... ahem...\n\nSo you are correct, this is only an issue when compiled for 32 bit systems.\n\n--\nKieran\n\n> \n>>>>   ptr 0xf1234567 u64 0xfffffffff1234567 uint64 0xf1234567\n>>>>\n>>>> The standards states:\n>>>>\n>>>> \"A pointer can be explicitly converted to any integral type large enough\n>>>> to hold all values of its type. The mapping function is\n>>>> implementation-defined. [Note: It is intended to be unsurprising to\n>>>> those who know the addressing structure of the underlying machine. — end\n>>>> note]\"\n>>>>\n>>>> And as such the g++ implementation appears to be little more surprising\n>>>> than expected in this situation.\n>>>>\n>>>> The MediaDevice passes pointers to the kernel via the struct\n>>>> media_v2_topology in which pointers are cast using a uint64 type (__u64),\n>>>> which is affected by the sign extension described above when BIT(32) is\n>>>> set and causes an invalid address to be given to the kernel.\n>>>>\n>>>> Ensure that we cast using uintptr_t which is not affected by the sign\n>>>> extension issue.\n>>>>\n>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>\n>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>>\n>>>> ---\n>>>> v2:\n>>>>  - Expand commit message to explain the underlying issue.\n>>>>  - include stdint.h\n>>>>  - use uintptr_t instead of std::uintptr_t\n>>>>\n>>>>  src/libcamera/media_device.cpp | 9 +++++----\n>>>>  1 file changed, 5 insertions(+), 4 deletions(-)\n>>>>\n>>>> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n>>>> index fad475b9ac76..0d6b5efd9e7a 100644\n>>>> --- a/src/libcamera/media_device.cpp\n>>>> +++ b/src/libcamera/media_device.cpp\n>>>> @@ -9,6 +9,7 @@\n>>>>  \n>>>>  #include <errno.h>\n>>>>  #include <fcntl.h>\n>>>> +#include <stdint.h>\n>>>>  #include <string>\n>>>>  #include <string.h>\n>>>>  #include <sys/ioctl.h>\n>>>> @@ -236,10 +237,10 @@ int MediaDevice::populate()\n>>>>  \t */\n>>>>  \twhile (true) {\n>>>>  \t\ttopology.topology_version = 0;\n>>>> -\t\ttopology.ptr_entities = reinterpret_cast<__u64>(ents);\n>>>> -\t\ttopology.ptr_interfaces = reinterpret_cast<__u64>(interfaces);\n>>>> -\t\ttopology.ptr_links = reinterpret_cast<__u64>(links);\n>>>> -\t\ttopology.ptr_pads = reinterpret_cast<__u64>(pads);\n>>>> +\t\ttopology.ptr_entities = reinterpret_cast<uintptr_t>(ents);\n>>>> +\t\ttopology.ptr_interfaces = reinterpret_cast<uintptr_t>(interfaces);\n>>>> +\t\ttopology.ptr_links = reinterpret_cast<uintptr_t>(links);\n>>>> +\t\ttopology.ptr_pads = reinterpret_cast<uintptr_t>(pads);\n>>>>  \n>>>>  \t\tret = ioctl(fd_, MEDIA_IOC_G_TOPOLOGY, &topology);\n>>>>  \t\tif (ret < 0) {\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["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 8FFBF61F5F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 18 Feb 2020 18:38:31 +0100 (CET)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id F0A0E2F9;\n\tTue, 18 Feb 2020 18:38:30 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1582047511;\n\tbh=adk9uxmU+CRcefugIkDHsa1SHgI4NT12Blmq14B0hkk=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=BWl7qDaUfVFEP5Kf3J0ceiHDTQetx6BiR8Gee9LWKj7ke6VHv0OjZuT9ZlxCGFPGK\n\t0xGw3RvOoLEBS5DYc36VfNsNzvGtzjUQS/HrLMWSlWEWnPorRdheqdG6AqnI4eb2vC\n\tQuDUqKgUra5mucaC/oUNlLZf/7hvTAr29UPfYdWg=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","References":"<20200218141839.5574-1-kieran.bingham@ideasonboard.com>\n\t<20200218151708.GF4828@pendragon.ideasonboard.com>\n\t<05c5c08d-3328-9f44-6bad-26fea9811d32@ideasonboard.com>\n\t<20200218173358.GG4828@pendragon.ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<40af94f2-c95c-4efc-7e05-78512229347f@ideasonboard.com>","Date":"Tue, 18 Feb 2020 17:38:27 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.9.1","MIME-Version":"1.0","In-Reply-To":"<20200218173358.GG4828@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v2] libcamera: media_device: prevent\n\tsign extension on casts","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>","X-List-Received-Date":"Tue, 18 Feb 2020 17:38:31 -0000"}}]