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

sysctl syscall removed in 2.6.18+ kernels



Hi all,

Starting with 2.6.18, the official kernels do not have the sysctl 
syscall anymore [1] or rather it has been replaced by a dummy syscall
that always fail and print a message in the log, and thus the sysctl()
function will not work anymore. 

It already started to annoy some people having their log filled with
such messages.

I have checked the whole archive (i386 only for now), and verified each
dynamically linked object that use the __sysctl symbol. The list of
package is quite small:
- glibc (woody, sarge, etch, sid, experimental)
- newlib (sarge, etch, sid)

I have investigated the glibc case, and there are two places where
sysctl() is used. 

The first one is in libpthread (both linuxthreads and nptl), that 
explains why the number of message in the log is important, it occurs 
for every binary using threads! It appears the message is actually
harmless, as there is a fallback to /proc/sys instead. I have already
checked a patch in our SVN to use /proc/sys directly. I also added a
warning at link time so that so users are warned not to use sysctl().

The second is in ioperm and concerns arm only. I will try to do a patch
in the next few days.

I haven't investigated newlib yet.

I will try to check for binaries on other architectures, but it takes a
long time for each of them, so it will probably last a few days.

I think such fixes are something to have, as they are rumors that etch
may be shipped with 2.6.18, and as 2.6.18 will be out before etch!

Bye,
Aurelien

[1] http://lkml.org/lkml/2006/7/15/54

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32@debian.org         | aurelien@aurel32.net
   `-    people.debian.org/~aurel32 | www.aurel32.net



Reply to: