[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [qemu-xen-unstable] block-vvfat: fix fat_chksum() buffer overrun warning



commit af9e620745434868b0aeebc00c6ca1cadd9a01c9
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Nov 4 11:54:11 2014 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Oct 16 16:52:06 2015 +0100

    block-vvfat: fix fat_chksum() buffer overrun warning
    
    Newer GCC versions raise an undefined behaviour warning in
    fat_chksum() because it overruns the name buffer.  However, this is
    intentional behaviour because the extension array immediately follows.
    
    Refactor this function to avoid the warning and make it clear it's
    checksumming both parts.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Coverity-ID: 1055738
---
 block-vvfat.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/block-vvfat.c b/block-vvfat.c
index 9eb676b..345d7be 100644
--- a/block-vvfat.c
+++ b/block-vvfat.c
@@ -504,14 +504,21 @@ static void set_begin_of_direntry(direntry_t* direntry, 
uint32_t begin)
 
 /* fat functions */
 
+static inline void fat_chksum_part(const char *name, size_t len, uint8_t 
*chksum)
+{
+    size_t i;
+
+    for(i = 0; i < len; i++)
+       *chksum = (((*chksum&0xfe) >> 1) | ((*chksum & 0x01) ? 0x80 : 0))
+           + (unsigned char)name[i];
+}
+
 static inline uint8_t fat_chksum(const direntry_t* entry)
 {
     uint8_t chksum=0;
-    int i;
 
-    for(i=0;i<11;i++)
-       chksum=(((chksum&0xfe)>>1)|((chksum&0x01)?0x80:0))
-           +(unsigned char)entry->name[i];
+    fat_chksum_part(entry->name, ARRAY_SIZE(entry->name), &chksum);
+    fat_chksum_part(entry->extension, ARRAY_SIZE(entry->extension), &chksum);
 
     return chksum;
 }
--
generated by git-patchbot for /home/xen/git/qemu-xen-unstable.git

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.