[RFC (fix for 5.0?)] block/io: do not do pointer arithmetic on void *

Vladimir Sementsov-Ogievskiy posted 1 patch 5 years, 8 months ago
Test docker-mingw@fedora passed
Test docker-quick@centos7 passed
Test checkpatch passed
Test FreeBSD passed
Test asan passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200318142253.2809-1-vsementsov@virtuozzo.com
Maintainers: Fam Zheng <fam@euphon.net>, Max Reitz <mreitz@redhat.com>, Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>
block/io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[RFC (fix for 5.0?)] block/io: do not do pointer arithmetic on void *
Posted by Vladimir Sementsov-Ogievskiy 5 years, 8 months ago
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---

Hi all!

C standard doesn't allow pointer arithmetic on void *.
Still, gcc allows it as an extension:
 https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html

I can create a series of patches like this. Do we need it?

Also, where is documented which compilers are supported by Qemu?

 block/io.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/io.c b/block/io.c
index aba67f66b9..539178aed5 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1277,7 +1277,7 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
      * modifying the image file.  This is critical for zero-copy guest I/O
      * where anything might happen inside guest memory.
      */
-    void *bounce_buffer = NULL;
+    char *bounce_buffer = NULL;
 
     BlockDriver *drv = bs->drv;
     int64_t cluster_offset;
-- 
2.21.0


Re: [RFC (fix for 5.0?)] block/io: do not do pointer arithmetic on void *
Posted by Daniel P. Berrangé 5 years, 8 months ago
On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> 
> Hi all!
> 
> C standard doesn't allow pointer arithmetic on void *.
> Still, gcc allows it as an extension:
>  https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
> 
> I can create a series of patches like this. Do we need it?

I don't think so, we only care about gcc & clang.

> Also, where is documented which compilers are supported by Qemu?

It is checked in configure - gcc 4.8 or clang 3.4 or xcode clang 5.1

> 
>  block/io.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/block/io.c b/block/io.c
> index aba67f66b9..539178aed5 100644
> --- a/block/io.c
> +++ b/block/io.c
> @@ -1277,7 +1277,7 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
>       * modifying the image file.  This is critical for zero-copy guest I/O
>       * where anything might happen inside guest memory.
>       */
> -    void *bounce_buffer = NULL;
> +    char *bounce_buffer = NULL;
>  
>      BlockDriver *drv = bs->drv;
>      int64_t cluster_offset;
> -- 
> 2.21.0
> 
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Re: [RFC (fix for 5.0?)] block/io: do not do pointer arithmetic on void *
Posted by Eric Blake 5 years, 8 months ago
On 3/18/20 9:26 AM, Daniel P. Berrangé wrote:
> On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>
>> Hi all!
>>
>> C standard doesn't allow pointer arithmetic on void *.
>> Still, gcc allows it as an extension:
>>   https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
>>
>> I can create a series of patches like this. Do we need it?
> 
> I don't think so, we only care about gcc & clang.

Still, if all supported compilers support the extension, then our 
CODING_STYLE.rst should mention that it is safe to rely on the extension.

> 
>> Also, where is documented which compilers are supported by Qemu?
> 
> It is checked in configure - gcc 4.8 or clang 3.4 or xcode clang 5.1
> 


-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


Re: [RFC (fix for 5.0?)] block/io: do not do pointer arithmetic on void *
Posted by Stefan Hajnoczi 5 years, 7 months ago
On Wed, Mar 18, 2020 at 02:26:54PM +0000, Daniel P. Berrangé wrote:
> On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> > ---
> > 
> > Hi all!
> > 
> > C standard doesn't allow pointer arithmetic on void *.
> > Still, gcc allows it as an extension:
> >  https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
> > 
> > I can create a series of patches like this. Do we need it?
> 
> I don't think so, we only care about gcc & clang.

I agree with Dan.

Stefan