Bug 871827 - sysctl is using deprecated syscall net.ipv6.neigh.lo.base_reachable_time
Summary: sysctl is using deprecated syscall net.ipv6.neigh.lo.base_reachable_time
Keywords:
Status: CLOSED WORKSFORME
Alias: None
Product: Fedora
Classification: Fedora
Component: procps-ng
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Jaromír Cápík
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On: 152435
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-10-31 13:33 UTC by Branislav Náter
Modified: 2016-02-01 01:57 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of: 152435
Environment:
Last Closed: 2012-12-12 18:00:08 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Branislav Náter 2012-10-31 13:33:02 UTC
Apperas in procps-ng

+++ This bug was initially created as a clone of Bug #152435 +++

Description of problem:
Mar 29 16:17:17 tux kernel: process `sysctl' is using deprecated sysctl 
(syscall) net.ipv6.neigh.lo.base_reachable_time; Use 
net.ipv6.neigh.lo.base_reachable_time_ms instead.

Version-Release number of selected component (if applicable):
procps-3.2.5-3

How reproducible:
Everytime: Reboot the system, look into /var/log/messages or into dmesg

Actual results / Expected results:
No message in logfile, no use of deprecated syscall.

--- Additional comment from kzak on 2005-04-25 07:53:18 EDT ---



*** This bug has been marked as a duplicate of 144459 ***

--- Additional comment from redhat-bugzilla on 2006-06-22 16:22:47 EDT ---

Reopening, because this bug report is neither a real duplicate of bug #136451 
nor is it fixed in Rawhide as bug #136451 is marked. Using procps-3.2.6-4 and 
kernel-2.6.17-1.2293_FC6 while today's reboot:

kernel: process `sysctl' is using deprecated sysctl (syscall) net.ipv6.neigh.lo.
base_reachable_time; Use net.ipv6.neigh.lo.base_reachable_time_ms instead.

--- Additional comment from kzak on 2006-06-23 09:58:25 EDT ---

It's same like bug #158701. 

I don't have idea where is a problem. There is something what calls sysctl with
this old option. I tried add some debug messages to the sysctl command, but it
seems that nothing calls (during boot) sysctl with this option, althought the
error message is in the /var/log/messages file. Strange...

--- Additional comment from redhat-bugzilla on 2006-06-23 11:07:23 EDT ---

I would like to track this down and resolve forever as I'm able to reproduce 
this during any reboot; more information from my syslog (all messages below
from Jun 22 18:18:30 -> same second):

kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
kernel: Netfilter messages via NETLINK v0.30.
kernel: ip_conntrack version 2.4 (8191 buckets, 65528 max) - 232 bytes per 
conntrack
kernel: NET: Registered protocol family 10
kernel: lo: Disabled Privacy Extensions
kernel: IPv6 over IPv4 tunneling driver
kernel: process `sysctl' is using deprecated sysctl (syscall) net.ipv6.neigh.lo.
base_reachable_time; Use net.ipv6.neigh.lo.base_reachable_time_ms instead.
kernel: ADDRCONF(NETDEV_UP): eth0: link is not ready
kernel: tg3: eth0: Link is up at 100 Mbps, full duplex.
kernel: tg3: eth0: Flow control is off for TX and off for RX.
kernel: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

A `grep -r "net.ipv6.neigh.eth0.base_reachable_time" /etc/* 2> /dev/null` 
returned nothing. Any suggestions out of the syslog messages?

--- Additional comment from kzak on 2006-06-23 11:30:39 EDT ---

Albert, do you have any experience with this strange problem on the latest kernels?

--- Additional comment from jorton on 2006-06-29 11:14:46 EDT ---

I vaguely recall reading that this message is triggered by the kernel on any
attempt to *read* that sysctl; which sysctl does at some point, possibly it
traverses the whole tree or something?  (I also vaguely recall that it was
generally agreed to be stupid behaviour on the kernel's part)

--- Additional comment from jorton on 2006-06-29 11:20:46 EDT ---

Ah, yeah; there is a "sysctl -a" in the
/etc/sysconfig/network-scripts/init.ipv6-global.  So my bet is that this error
doesn't manifest if you explicitly disable IPv6 in the init scripts with
NETWORKING_IPV6=no.   I guess that the kernel should probably make that procfs
file unreadable if it doesn't want sysctl to read it, presumably that would
prevent the warning.

--- Additional comment from redhat-bugzilla on 2006-06-30 05:13:16 EDT ---

So it's more a kernel issue rather a procps problem? And thanks for figgering 
out...

--- Additional comment from jorton on 2006-07-27 05:28:16 EDT ---

Yeah, I reckon.   The kernel should not make the proc entry readable if it
doesn't want it to be used.

--- Additional comment from albert.net on 2006-07-27 12:39:41 EDT ---

Don't ever make them unreadable. The sysctl command needs to read back the data
to verify that the write was accepted and interpreted correctly. If the data
can not be read, sysctl needs to report the error to the user.

If you want to hide something, then hide it. Make it not show up in a
directory listing.

Every write-only sysctl is a kernel bug.


--- Additional comment from davej on 2006-07-28 12:24:05 EDT ---

davem, can we just rip this out ?  What's likely to break ?


--- Additional comment from redhat-bugzilla on 2006-09-02 11:53:15 EDT ---

Ping?

--- Additional comment from scott.scriven on 2006-11-29 13:58:14 EST ---

I get a nearly identical error on RHEL5b2, as of yesterday:

  process `cp' is using deprecated sysctl (syscall) net.ipv6.neigh.eth4.
base_reachable_time; Use net.ipv6.neigh.eth4.base_reachable_time_ms instead.

This was printed to the console during a postinstall sanity check test.  I 
assume the test tried to "cp /proc/sys/net/ipv6/neigh/eth4/base_reachable_time" 
somewhere, though I haven't located it yet.

I also get the original error during boot, or any time I run "sysctl -a".

While the "sysctl -a" is only doing what it's supposed to, it may be worth 
locating any other places in the distro which might try to access the old 
syscall.  A big "grep -r base_reachable_time" and replace through the entire 
distro source could probably do the trick.

As a quick test, I tried looking through binaries in /bin, /sbin, and /usr.  I 
found only a few matches:

[root@host /usr/lib]# grep base_reachable_time *
Binary file libnetsnmpmibs.so.10 matches
Binary file libnetsnmpmibs.so.10.0.1 matches
Binary file libnl.so.1 matches
Binary file libnl.so.1.0-pre5 matches


--- Additional comment from redhat-bugzilla on 2006-12-09 13:56:37 EST ---

Ping?

--- Additional comment from vonbrand.cl on 2007-01-04 18:26:33 EST ---

Is this a case of complaints when /reading/ the /proc entry? I'd understand that
one should complain on /writing/...

(Yes, still with us with today's rawhide, kernel-2.6.19-1.2904.fc7 and
procps-3.2.7-8)

--- Additional comment from davem on 2007-03-26 15:55:37 EDT ---

The only valid reason to read a sysctl value is to see what it is
set to, and based upon that potentially change it.  When and if a
value goes away, both reads and writes will break, that's why we warn
for both read and write accesses.

I'm not getting rid of the warning just to satisfy this "sysctl -a"
case.  We are concerned about readers of the sysctl just as
equally as writers, because if the sysctl is taken away it would
break a shell script reading this value just as equally as something
making modifications.

This "sysctl -a" thing makes it absolutely impossible to warn about
a deprecated variable properly.  We are concerned about "access" of
any kind, be it read or write, because once the sysctl goes away both
kinds of accesses will stop working.

The ipv6 init script can be fixed to only access the sysctl values it
is actually interested in rather than everything.  It just wants a list
of sysctl values that ipv6 provides which match a given regexp, you don't
need to open and read the values just to provide that.

Please push this back to the script folks, this construct is quite
inefficient as well since it has to read all the sysctl values in
the system.


--- Additional comment from kzak on 2007-04-04 05:35:49 EDT ---

I've added to the sysctl command table with deprecated variables. Now, the
"sysctl -a" command does ignore and skip these values. It means that deprecated
values are hidden when (and only when) you list all values:

   sysctl -a | egrep "^net.ipv6..*.base_reachable_time ="

returns nothing. But you can directly use deprecated values (without -a):

   sysctl net.ipv6.neigh.lo.base_reachable_time

returns expected data. I think it's good compromise.

This change doesn't have any impact to our ipv6 init script. The scripts don't
look for these deprecated values.



--- Additional comment from redhat-bugzilla on 2007-05-28 07:08:38 EDT ---

Confirmed to work, closing now.

Comment 1 Jaromír Cápík 2012-12-12 18:00:08 UTC
Can't be reproduced with the latest updates ... closing.


Note You need to log in before you can comment on or make changes to this bug.