[syslinux] SYSLINUX 3.61 released

Jeffrey Hutzelman jhutz at cmu.edu
Mon Feb 4 12:58:09 PST 2008


--On Monday, February 04, 2008 09:41:31 AM -0800 "H. Peter Anvin" 
<hpa at zytor.com> wrote:

> Dag Wieers wrote:
>> On Sun, 3 Feb 2008, H. Peter Anvin wrote:
>>
>>> Changes in 3.61:
>>> 	* EXTLINUX: fix crash when accessing an empty file.
>>> 	* elf.c32: If a PHDR segment is present, load it.
>>> 	* Fix SHA-1 and MD5 passwords.
>>> 	* ISOLINUX: fix booting when mastered without
>>> 	  mkisofs -boot-info-table (broken since 3.50, sigh...)
>>> 	* Handle BIOSes which emit multiple contiguous valid
>>> 	  memory regions in the e820 map.
>>
>> Since this release, I am unable to build extlinux on RHEL3 and RH9
>> because of the following compile error:
>>
>> 	gcc -Wp,-MT,extlinux.o,-MMD,.extlinux.o.d -W -Wall -Wno-sign-compare
>> 	-D_FILE_OFFSET_BITS=64 -g -Os -I. -I.. -I../libinstaller -c -o
>> 	extlinux.o extlinux.c In file included from /usr/include/linux/vfs.h:4,
>> 	                 from /usr/include/linux/fs.h:14,
>> 	                 from extlinux.c:43:
>> 	/usr/include/asm/statfs.h:12: redefinition of `struct statfs'
>> 	make[1]: *** [extlinux.o] Error 1
>> 	make[1]: Leaving directory `/dar/build/syslinux-3.61/extlinux'
>> 	make: *** [installer] Error 2
>>
>> The following patch seems to fix the problem:
>>
>> 	--- extlinux/extlinux.c.orig	2008-02-04 05:58:50.000000000 +0100
>> 	+++ extlinux/extlinux.c	2008-01-11 07:42:10.000000000 +0100
>> 	@@ -36,7 +36,6 @@
>> 	 # include <sys/stat.h>
>> 	 # include <sys/types.h>
>> 	 # include <sys/mount.h>
>> 	-#include <sys/vfs.h>
>>
>> 	 # include <linux/fd.h>		/* Floppy geometry */
>> 	 # include <linux/hdreg.h>	/* Hard disk geometry */
>>
>
> That would be a bug in those distros... <sys/vfs.h> *is* the correct
> header for statfs().

I don't think it's fair to call it a bug in the distro.  The problem is 
that in 2.4, <linux/fs.h> pulls in quite a large number of other headers, 
including ultimately <asm/statfs.h> where the kernel's struct statfs is 
defined.  I can't see a clean way to fix this, though perhaps it would work 
to redefine 'statfs' to something else just long enough to pull in 
<linux/fs.h>, and then put it back.  Something like...

+#define statfs stupid_kernel_statfs
 #include <linux/fs.h>
+#undef statfs

> I don't have any system that old readily on hand to I can figure out a
> workaround that doesn't bugger up other systems, I'm afraid.

I do, and it wouldn't be too hard to cons up a VM for you.

> However, the workaround you have used should work on those distros at
> least.

It may work, but it's pretty sketchy.  Several fields in struct statfs are 
always 32 bits wide in 2.4's kernel-mode struct statfs, but become wider in 
user mode when FILE_OFFSET_BITS=64 is in effect.  An extlinux built with 
this patch will trample on the stack in install_loader(), which may or may 
not be a problem depending on how the compiler happens to order locals on 
the stack.

-- Jeffrey T. Hutzelman (N3NHS) <jhutz+ at cmu.edu>
   Carnegie Mellon University - Pittsburgh, PA




More information about the Syslinux mailing list