Fix file descriptor leak
Probably not much of an error since it's in the bootloader :) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30965 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
e5ea0b3418
commit
158e14a8c6
1 changed files with 15 additions and 1 deletions
|
@ -327,7 +327,10 @@ int load_mi4(unsigned char* buf, char* firmware, unsigned int buffer_size)
|
|||
printf("mi4 size: %x", mi4header.mi4size);
|
||||
|
||||
if ((mi4header.mi4size-MI4_HEADER_SIZE) > buffer_size)
|
||||
{
|
||||
close(fd);
|
||||
return EFILE_TOO_BIG;
|
||||
}
|
||||
|
||||
/* CRC32 */
|
||||
printf("CRC32: %x", mi4header.crc32);
|
||||
|
@ -342,7 +345,10 @@ int load_mi4(unsigned char* buf, char* firmware, unsigned int buffer_size)
|
|||
lseek(fd, MI4_HEADER_SIZE, SEEK_SET);
|
||||
rc = read(fd, buf, mi4header.mi4size-MI4_HEADER_SIZE);
|
||||
if(rc < (int)mi4header.mi4size-MI4_HEADER_SIZE)
|
||||
{
|
||||
close(fd);
|
||||
return EREAD_IMAGE_FAILED;
|
||||
}
|
||||
|
||||
/* Check CRC32 to see if we have a valid file */
|
||||
sum = chksum_crc32 (buf, mi4header.mi4size - MI4_HEADER_SIZE);
|
||||
|
@ -350,7 +356,10 @@ int load_mi4(unsigned char* buf, char* firmware, unsigned int buffer_size)
|
|||
printf("Calculated CRC32: %x", sum);
|
||||
|
||||
if(sum != mi4header.crc32)
|
||||
{
|
||||
close(fd);
|
||||
return EBAD_CHKSUM;
|
||||
}
|
||||
|
||||
if( (mi4header.plaintext + MI4_HEADER_SIZE) != mi4header.mi4size)
|
||||
{
|
||||
|
@ -358,7 +367,10 @@ int load_mi4(unsigned char* buf, char* firmware, unsigned int buffer_size)
|
|||
int key_index = tea_find_key(&mi4header, fd);
|
||||
|
||||
if (key_index < 0)
|
||||
{
|
||||
close(fd);
|
||||
return EINVALID_FORMAT;
|
||||
}
|
||||
|
||||
/* Plaintext part is already loaded */
|
||||
buf += mi4header.plaintext;
|
||||
|
@ -373,10 +385,12 @@ int load_mi4(unsigned char* buf, char* firmware, unsigned int buffer_size)
|
|||
/* Check decryption was successfull */
|
||||
if(le2int(&buf[mi4header.length-mi4header.plaintext-4]) != 0xaa55aa55)
|
||||
{
|
||||
close(fd);
|
||||
return EREAD_IMAGE_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return EOK;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue