Patchwork block/vdi: Fix wrong size in conditionally used memset, memcmp

login
register
mail settings
Submitter Stefan Weil
Date Feb. 4, 2011, 8:01 p.m.
Message ID <1296849676-7429-1-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/81943/
State Accepted
Headers show

Comments

Stefan Weil - Feb. 4, 2011, 8:01 p.m.
Error report from cppcheck:
block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.

Fix both by setting the correct size.

The buggy code is only used when QEMU is build without uuid support.
The bug is not critical, so there is no urgent need to apply it to
old versions of QEMU.

Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 block/vdi.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Anthony Liguori - Feb. 4, 2011, 8:19 p.m.
On 02/04/2011 02:01 PM, Stefan Weil wrote:
> Error report from cppcheck:
> block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
> block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.
>
> Fix both by setting the correct size.
>
> The buggy code is only used when QEMU is build without uuid support.
> The bug is not critical, so there is no urgent need to apply it to
> old versions of QEMU.
>
> Cc: Kevin Wolf<kwolf@redhat.com>
> Signed-off-by: Stefan Weil<weil@mail.berlios.de>
>    

Huh, I wouldn't have thought this was the case.  I almost feel that 
doing a #define UUID_SIZE may be better because sizeof(typeof(v)) != 
sizeof(v) is weird even by C standards.

Regards,

Anthony Liguori

> ---
>   block/vdi.c |    4 ++--
>   1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/block/vdi.c b/block/vdi.c
> index 83b9c04..083266e 100644
> --- a/block/vdi.c
> +++ b/block/vdi.c
> @@ -119,13 +119,13 @@ void uuid_unparse(const uuid_t uu, char *out);
>   #if !defined(CONFIG_UUID)
>   void uuid_generate(uuid_t out)
>   {
> -    memset(out, 0, sizeof(out));
> +    memset(out, 0, sizeof(uuid_t));
>   }
>
>   int uuid_is_null(const uuid_t uu)
>   {
>       uuid_t null_uuid = { 0 };
> -    return memcmp(uu, null_uuid, sizeof(uu)) == 0;
> +    return memcmp(uu, null_uuid, sizeof(uuid_t)) == 0;
>   }
>
>   void uuid_unparse(const uuid_t uu, char *out)
>
Kevin Wolf - Feb. 7, 2011, 9:12 a.m.
Am 04.02.2011 21:19, schrieb Anthony Liguori:
> On 02/04/2011 02:01 PM, Stefan Weil wrote:
>> Error report from cppcheck:
>> block/vdi.c:122: error: Using sizeof for array given as function argument returns the size of pointer.
>> block/vdi.c:128: error: Using sizeof for array given as function argument returns the size of pointer.
>>
>> Fix both by setting the correct size.
>>
>> The buggy code is only used when QEMU is build without uuid support.
>> The bug is not critical, so there is no urgent need to apply it to
>> old versions of QEMU.
>>
>> Cc: Kevin Wolf<kwolf@redhat.com>
>> Signed-off-by: Stefan Weil<weil@mail.berlios.de>

Thanks, applied to the block branch.

> Huh, I wouldn't have thought this was the case.  I almost feel that 
> doing a #define UUID_SIZE may be better because sizeof(typeof(v)) != 
> sizeof(v) is weird even by C standards.

I think typeof(uu) is actually unsigned char*, not unsigned char[16].
Strange semantics anyway...

Kevin

Patch

diff --git a/block/vdi.c b/block/vdi.c
index 83b9c04..083266e 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -119,13 +119,13 @@  void uuid_unparse(const uuid_t uu, char *out);
 #if !defined(CONFIG_UUID)
 void uuid_generate(uuid_t out)
 {
-    memset(out, 0, sizeof(out));
+    memset(out, 0, sizeof(uuid_t));
 }
 
 int uuid_is_null(const uuid_t uu)
 {
     uuid_t null_uuid = { 0 };
-    return memcmp(uu, null_uuid, sizeof(uu)) == 0;
+    return memcmp(uu, null_uuid, sizeof(uuid_t)) == 0;
 }
 
 void uuid_unparse(const uuid_t uu, char *out)