Re: [PATCH] SYSCTL: Fix sysctl breakage on systems with older glibc

Eric W. Biederman
2009-12-17T15:08:14Z

Andi Kleen <andi@firstfloor.org> writes:

> SYSCTL: Fix breakage on systems with older glibc
>
> the sysctl(2) changes made systems
> with old glibc nearly unusable. About every command gives a:

> warning: process `ls' used the deprecated sysctl s ystem call with 1.4
>
> warning in the log.

I cranked the level of warning up at least in part to see what the
reaction would be. If it makes logging in and manually using the
machine unbearable on systems with versions of glibc from days of
yore, the level of logging is too high.

> I see this on a SUSE 10.0 system with glibc 2.3.5.
> Don't warn for this common case.

Perhaps it is just my sample of the world but glibc < 2.5 isn't
common, especially on machines that I am putting new kernels on.
Equally machines with 3+ year old installs are rare.

> Signed-off-by: Andi Kleen <ak@linux.intel.com>
>
> diff -u linux-2.6.32-git12/kernel/sysctl_binary.c-o linux-2.6.32-git12/kernel/sysctl_binary.c
> --- linux-2.6.32-git12/kernel/sysctl_binary.c-o 2009-12-16 12:15:52.000000000 +0100
> +++ linux-2.6.32-git12/kernel/sysctl_binary.c 2009-12-16 12:14:58.000000000 +0100
> @@ -1399,6 +1399,13 @@
> {
> int i;
>
> + /*
> + * CTL_KERN/KERN_VERSION is used by older glibc and cannot
> + * ever go away.
> + */
The comment is wrong. Older versions of glibc are perfectly happy
getting -ENOSYS form sys_sysctl.

> + if (name[0] == CTL_KERN && name[1] == KERN_VERSION)
> + return;

If you make it printk_once for this case I think that strikes the right
balance. You won't be spammed to death by messages telling you about
a silly old glibc, but you will be told.

> if (printk_ratelimit()) {
> printk(KERN_INFO
> "warning: process `%s' used the deprecated sysctl "

Eric