[syslinux] [PATCH] isohybrid: fix overflow on 32 bit system

Kang Kai Kai.Kang at windriver.com
Sun May 11 23:53:17 PDT 2014


On 2014年05月12日 10:49, H. Peter Anvin wrote:
> On 05/11/2014 06:56 PM, Kai Kang wrote:
>> When call isohybrid with option '-u', it overflows on a 32 bits host. It
>> seeks to 512 bytes before the end of the image to install gpt header. If
>> the size of image is larger than LONG_MAX, it overflows fseek() and
>> cause error:
>>
>> isohybrid: wrlinux-image-x86-64-20140505110100.iso: seek error - 8: Invalid argument
>>
>> Check the offset and call fseek() multi-times if offset is too large.
>>
>> Signed-off-by: Kai Kang <kai.kang at windriver.com>
> NAK.
>
> The right thing to do is compile it with #define _FILE_OFFSET_BITS 64
> and change fseek to fseeko with the appropriate type being off_t.
>
> 	-hpa

Hi hpa,

Thanks for your reply.

In utils/Makefile, -D_FILE_OFFSET_BITS=64 is added to CFLAGS. isohybrid 
is compiled with -D_FILE_OFFSET_BITS=64 but it still fails to handle the 
large offset.

make[3]: Entering directory 
`/home/neil/wrlinux/builds/install-x86-64/bitbake_build/tmp/work/i686-linux/syslinux-native/6.01-r0/syslinux-6.01/bios/utils'
gcc 
-isystem/home/neil/wrlinux/builds/install-x86-64/bitbake_build/tmp/sysroots/i686-linux/usr/include 
-O2 -pipe -Wp,-MT,isohybrid.o,-MMD,./.isohybrid.o.d -W -Wall 
-Wstrict-prototypes -Os -fomit-frame-pointer *-D_FILE_OFFSET_BITS=64* 
-I/home/neil/wrlinux/builds/install-x86-64/bitbake_build/tmp/work/i686-linux/syslinux-native/6.01-r0/syslinux-6.01/utils 
-c -o isohybrid.o 
/home/neil/wrlinux/builds/install-x86-64/bitbake_build/tmp/work/i686-linux/syslinux-native/6.01-r0/syslinux-6.01/utils/isohybrid.c

I build it on RedHat Enterprise Linux 6.2 with glibc 2.12.

Regards,
Kai

>


-- 
Regards,
Neil | Kai Kang



More information about the Syslinux mailing list