Patchwork [07/17] block/vvfat.c: fix warnings with _FORTIFY_SOURCE

login
register
mail settings
Submitter Juan Quintela
Date Jan. 20, 2010, 8:14 p.m.
Message ID <086f8b2c736cb88cf217fe10ab558eec92fc000d.1264017981.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/43349/
State New
Headers show

Comments

Juan Quintela - Jan. 20, 2010, 8:14 p.m.
From: Kirill A. Shutemov <kirill@shutemov.name>

CC    block/vvfat.o
cc1: warnings being treated as errors
block/vvfat.c: In function 'commit_one_file':
block/vvfat.c:2259: error: ignoring return value of 'ftruncate', declared with attribute warn_unused_result
make: *** [block/vvfat.o] Error 1
  CC    block/vvfat.o
In file included from /usr/include/stdio.h:912,
                 from ./qemu-common.h:19,
                 from block/vvfat.c:27:
In function 'snprintf',
    inlined from 'init_directories' at block/vvfat.c:871,
    inlined from 'vvfat_open' at block/vvfat.c:1068:
/usr/include/bits/stdio2.h:65: error: call to __builtin___snprintf_chk will always overflow destination buffer
make: *** [block/vvfat.o] Error 1

Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 block/vvfat.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)
Gleb Natapov - Jan. 21, 2010, 7:37 a.m.
On Wed, Jan 20, 2010 at 09:14:03PM +0100, Juan Quintela wrote:
> From: Kirill A. Shutemov <kirill@shutemov.name>
> 
> CC    block/vvfat.o
> cc1: warnings being treated as errors
> block/vvfat.c: In function 'commit_one_file':
> block/vvfat.c:2259: error: ignoring return value of 'ftruncate', declared with attribute warn_unused_result
> make: *** [block/vvfat.o] Error 1
>   CC    block/vvfat.o
> In file included from /usr/include/stdio.h:912,
>                  from ./qemu-common.h:19,
>                  from block/vvfat.c:27:
> In function 'snprintf',
>     inlined from 'init_directories' at block/vvfat.c:871,
>     inlined from 'vvfat_open' at block/vvfat.c:1068:
> /usr/include/bits/stdio2.h:65: error: call to __builtin___snprintf_chk will always overflow destination buffer
> make: *** [block/vvfat.o] Error 1
> 
> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  block/vvfat.c |    9 +++++++--
>  1 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/block/vvfat.c b/block/vvfat.c
> index 063f731..df957e5 100644
> --- a/block/vvfat.c
> +++ b/block/vvfat.c
> @@ -868,7 +868,8 @@ static int init_directories(BDRVVVFATState* s,
>      {
>  	direntry_t* entry=array_get_next(&(s->directory));
>  	entry->attributes=0x28; /* archive | volume label */
> -	snprintf((char*)entry->name,11,"QEMU VVFAT");
> +	memcpy(entry->name,"QEMU VVF",8);
> +	memcpy(entry->extension,"AT ",3);
>      }
> 
Before the change extension was initialized to "AT\0" after it is "AT "

>      /* Now build FAT, and write back information into directory */
> @@ -2256,7 +2257,11 @@ static int commit_one_file(BDRVVVFATState* s,
>  	c = c1;
>      }
> 
> -    ftruncate(fd, size);
> +    if (ftruncate(fd, size)) {
> +        perror("ftruncate()");
> +        close(fd);
> +        return -4;
> +    }
>      close(fd);
> 
>      return commit_mappings(s, first_cluster, dir_index);
> -- 
> 1.6.6
> 
> 

--
			Gleb.
Juan Quintela - Jan. 21, 2010, 8:17 a.m.
Gleb Natapov <gleb@redhat.com> wrote:
> On Wed, Jan 20, 2010 at 09:14:03PM +0100, Juan Quintela wrote:
>> From: Kirill A. Shutemov <kirill@shutemov.name>
>> 
>> CC    block/vvfat.o
>> cc1: warnings being treated as errors
>> block/vvfat.c: In function 'commit_one_file':
>> block/vvfat.c:2259: error: ignoring return value of 'ftruncate', declared with attribute warn_unused_result
>> make: *** [block/vvfat.o] Error 1
>>   CC    block/vvfat.o
>> In file included from /usr/include/stdio.h:912,
>>                  from ./qemu-common.h:19,
>>                  from block/vvfat.c:27:
>> In function 'snprintf',
>>     inlined from 'init_directories' at block/vvfat.c:871,
>>     inlined from 'vvfat_open' at block/vvfat.c:1068:
>> /usr/include/bits/stdio2.h:65: error: call to __builtin___snprintf_chk will always overflow destination buffer
>> make: *** [block/vvfat.o] Error 1
>> 
>> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>>  block/vvfat.c |    9 +++++++--
>>  1 files changed, 7 insertions(+), 2 deletions(-)
>> 
>> diff --git a/block/vvfat.c b/block/vvfat.c
>> index 063f731..df957e5 100644
>> --- a/block/vvfat.c
>> +++ b/block/vvfat.c
>> @@ -868,7 +868,8 @@ static int init_directories(BDRVVVFATState* s,
>>      {
>>  	direntry_t* entry=array_get_next(&(s->directory));
>>  	entry->attributes=0x28; /* archive | volume label */
>> -	snprintf((char*)entry->name,11,"QEMU VVFAT");
>> +	memcpy(entry->name,"QEMU VVF",8);
>> +	memcpy(entry->extension,"AT ",3);
>>      }
>> 
> Before the change extension was initialized to "AT\0" after it is "AT "

it was paolo who told to do that change.  entries are not 0 ended.

that was his explanation.

Later, Juan.
Gleb Natapov - Jan. 21, 2010, 8:18 a.m.
On Thu, Jan 21, 2010 at 09:17:27AM +0100, Juan Quintela wrote:
> Gleb Natapov <gleb@redhat.com> wrote:
> > On Wed, Jan 20, 2010 at 09:14:03PM +0100, Juan Quintela wrote:
> >> From: Kirill A. Shutemov <kirill@shutemov.name>
> >> 
> >> CC    block/vvfat.o
> >> cc1: warnings being treated as errors
> >> block/vvfat.c: In function 'commit_one_file':
> >> block/vvfat.c:2259: error: ignoring return value of 'ftruncate', declared with attribute warn_unused_result
> >> make: *** [block/vvfat.o] Error 1
> >>   CC    block/vvfat.o
> >> In file included from /usr/include/stdio.h:912,
> >>                  from ./qemu-common.h:19,
> >>                  from block/vvfat.c:27:
> >> In function 'snprintf',
> >>     inlined from 'init_directories' at block/vvfat.c:871,
> >>     inlined from 'vvfat_open' at block/vvfat.c:1068:
> >> /usr/include/bits/stdio2.h:65: error: call to __builtin___snprintf_chk will always overflow destination buffer
> >> make: *** [block/vvfat.o] Error 1
> >> 
> >> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
> >> Signed-off-by: Juan Quintela <quintela@redhat.com>
> >> ---
> >>  block/vvfat.c |    9 +++++++--
> >>  1 files changed, 7 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/block/vvfat.c b/block/vvfat.c
> >> index 063f731..df957e5 100644
> >> --- a/block/vvfat.c
> >> +++ b/block/vvfat.c
> >> @@ -868,7 +868,8 @@ static int init_directories(BDRVVVFATState* s,
> >>      {
> >>  	direntry_t* entry=array_get_next(&(s->directory));
> >>  	entry->attributes=0x28; /* archive | volume label */
> >> -	snprintf((char*)entry->name,11,"QEMU VVFAT");
> >> +	memcpy(entry->name,"QEMU VVF",8);
> >> +	memcpy(entry->extension,"AT ",3);
> >>      }
> >> 
> > Before the change extension was initialized to "AT\0" after it is "AT "
> 
> it was paolo who told to do that change.  entries are not 0 ended.
> 
> that was his explanation.
> 
OK. Just wanted to make sure this is intentional.

--
			Gleb.
Markus Armbruster - Jan. 21, 2010, 9:28 a.m.
Juan Quintela <quintela@redhat.com> writes:

> Gleb Natapov <gleb@redhat.com> wrote:
>> On Wed, Jan 20, 2010 at 09:14:03PM +0100, Juan Quintela wrote:
[...]
>>> diff --git a/block/vvfat.c b/block/vvfat.c
>>> index 063f731..df957e5 100644
>>> --- a/block/vvfat.c
>>> +++ b/block/vvfat.c
>>> @@ -868,7 +868,8 @@ static int init_directories(BDRVVVFATState* s,
>>>      {
>>>  	direntry_t* entry=array_get_next(&(s->directory));
>>>  	entry->attributes=0x28; /* archive | volume label */
>>> -	snprintf((char*)entry->name,11,"QEMU VVFAT");
>>> +	memcpy(entry->name,"QEMU VVF",8);
>>> +	memcpy(entry->extension,"AT ",3);
>>>      }
>>> 
>> Before the change extension was initialized to "AT\0" after it is "AT "
>
> it was paolo who told to do that change.  entries are not 0 ended.
>
> that was his explanation.

Please mention this in the commit message.

Patch

diff --git a/block/vvfat.c b/block/vvfat.c
index 063f731..df957e5 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -868,7 +868,8 @@  static int init_directories(BDRVVVFATState* s,
     {
 	direntry_t* entry=array_get_next(&(s->directory));
 	entry->attributes=0x28; /* archive | volume label */
-	snprintf((char*)entry->name,11,"QEMU VVFAT");
+	memcpy(entry->name,"QEMU VVF",8);
+	memcpy(entry->extension,"AT ",3);
     }

     /* Now build FAT, and write back information into directory */
@@ -2256,7 +2257,11 @@  static int commit_one_file(BDRVVVFATState* s,
 	c = c1;
     }

-    ftruncate(fd, size);
+    if (ftruncate(fd, size)) {
+        perror("ftruncate()");
+        close(fd);
+        return -4;
+    }
     close(fd);

     return commit_mappings(s, first_cluster, dir_index);