getpagesize / libsysfs broken with 0.148
Hi all,
the implementation of getpagesize() is broken in klibc.
klibc uses sysinfo.mem_unit, which linux interpretes as the memory unit all other memory values returned are to be multiplied with. So it's perfectly ok for the linux sysinfo() to return a mem_unit of '1', which is does if the memory available for this machine fits into the counter. For the unbelievers, have a look in kernel/timer.c:sys_sysinfo().
As a quick hack I've added a check for mem_unit==1 and reset the page_size to 4096 on those cases.
Naturally, this is not the right fix. The right fix would be to get the values from the kernel headers and/or some magic juju for those machines with variable pagesize.
It probably would not have been noticed, but as libsysfs insists on doing all reads from sysfs attributes with a length of pagesize, the failures were ... interesting.
So in short, udev does _not_ work with klibc until that (or an equivalent) patch is applied.
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke [email protected] SuSE Linux AG S390 & zSeries Maxfeldstraße 5 +49 911 74053 688 90409 Nürnberg http://www.suse.de
klibc/getpagesize.c renamed from klibc/getpagesize.c.orig +2 -1
@@ -20,5 +20,6 @@if ( rv ==-1 )return -1 ; -return (page_size = si.mem_unit); +/* sysinfo returns 1 for mem_unit in some cases, so default to 4096. */ +return (page_size = (si.mem_unit ==1 ?4096 : si.mem_unit)); }
Quoted 3 lines · Hannes Reinecke
Hi all,
the implementation of
getpagesize()is broken in klibc.
...
Hannes, care to send more patches from the Suse udev rpm upstream?
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idG21&alloc_id040&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 10 lines · Harald Hoyer
Quoted 3 lines · Hannes Reinecke
Hi all,
the implementation of
getpagesize()is broken in klibc....
Hannes, care to send more patches from the Suse udev rpm upstream?
About to do it. Watch this space.
Cheers,
Hannes
Signature · 15 lines
Dr. Hannes Reinecke [email protected] SuSE Linux AG S390 & zSeries Maxfeldstraße 5 +49 911 74053 688 90409 Nürnberg http://www.suse.de ------------------------------------------------------- This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools! Get your free copy of BEA WebLogic Workshop 8.1 today. http://ads.osdn.com/?ad_idG21&alloc_id040&opÌk _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net [email protected] https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 14 lines · Hannes Reinecke
Hi all,
the implementation of
getpagesize()is broken in klibc.klibc uses sysinfo.mem_unit, which linux interpretes as the memory unit all other memory values returned are to be multiplied with. So it's perfectly ok for the linux
sysinfo()to return amem_unitof '1', which is does if the memory available for this machine fits into the counter.
For the unbelievers, have a look in kernel/timer.c:sys_sysinfo().As a quick hack I've added a check for mem_unit=1 and reset the
page_sizeto 4096 on those cases.
Quoted 7 lines
Naturally, this is not the right fix. The right fix would be to get the values from the kernel headers and/or some magic juju for those machines with variable pagesize.
It probably would not have been noticed, but as libsysfs insists on doing all reads from sysfs attributes with a length of pagesize, the failures were ... interesting.
Libsysfs reads with length of pagesize because that was a sysfs limitation. Has sysfs changed?
There use to be an ifdef klibc around the getpagesize() call but that seems to have been removed at some point.
Thanks,
Dan
Quoted 6 lines
So in short, udev does _not_ work with klibc until that (or an equivalent) patch is applied.
Cheers,
Hannes
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idG21&alloc_id040&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 12 lines · Hannes Reinecke
Hi all,
the implementation of
getpagesize()is broken in klibc.klibc uses sysinfo.mem_unit, which linux interpretes as the memory unit all other memory values returned are to be multiplied with. So it's perfectly ok for the linux
sysinfo()to return amem_unitof '1', which is does if the memory available for this machine fits into the counter.
For the unbelievers, have a look in kernel/timer.c:sys_sysinfo().
Quoted 3 lines
As a quick hack I've added a check for mem_unit=1 and reset the
page_sizeto 4096 on those cases.
*SIGH* So much for the claim that there actually existed a sane way to get the page size across platforms. This is particularly nasty because of the definition of mmap2().
The kernel headers don't work very well since page size is a kernel-compile-time option on some platforms, e.g. MIPS, and dynamic on some platforms.
-hpa
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idG21&alloc_id040&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 9 lines · H. Peter Anvin
*SIGH* So much for the claim that there actually existed a sane way to get the page size across platforms. This is particularly nasty because of the definition of
mmap2().The kernel headers don't work very well since page size is a kernel-compile-time option on some platforms, e.g. MIPS, and dynamic on some platforms.
OK, Arjan van der Ven suggested using the AT_PAGESZ vector entry in the ELF header; this provides a nice and uniform solution across all platforms.
-hpa
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_idG21&alloc_id040&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel