Bug 152435 - sysctl is using deprecated syscall net.ipv6.neigh.lo.base_reachable_time
sysctl is using deprecated syscall net.ipv6.neigh.lo.base_reachable_time
Status: CLOSED RAWHIDE
Product: Fedora
Classification: Fedora
Component: procps (Show other bugs)
rawhide
All Linux
medium Severity medium
: ---
: ---
Assigned To: Tomas Smetana
Brian Brock
: Reopened
Depends On:
Blocks: FC4Target FC7Target 501785 871827
  Show dependency treegraph
 
Reported: 2005-03-29 10:00 EST by Robert Scheck
Modified: 2015-10-23 10:17 EDT (History)
9 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 501785 871827 (view as bug list)
Environment:
Last Closed: 2007-05-28 07:08:38 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Robert Scheck 2005-03-29 10:00:42 EST
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.
Comment 1 Karel Zak 2005-04-25 07:53:18 EDT

*** This bug has been marked as a duplicate of 144459 ***
Comment 2 Robert Scheck 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.
Comment 3 Karel Zak 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...
Comment 4 Robert Scheck 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?
Comment 5 Karel Zak 2006-06-23 11:30:39 EDT
Albert, do you have any experience with this strange problem on the latest kernels?
Comment 6 Joe Orton 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)
Comment 7 Joe Orton 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.
Comment 8 Robert Scheck 2006-06-30 05:13:16 EDT
So it's more a kernel issue rather a procps problem? And thanks for figgering 
out...
Comment 9 Joe Orton 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.
Comment 10 Albert Cahalan 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.
Comment 11 Dave Jones 2006-07-28 12:24:05 EDT
davem, can we just rip this out ?  What's likely to break ?
Comment 12 Robert Scheck 2006-09-02 11:53:15 EDT
Ping?
Comment 13 Scott Scriven 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
Comment 14 Robert Scheck 2006-12-09 13:56:37 EST
Ping?
Comment 15 Horst H. von Brand 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)
Comment 16 David Miller 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.
Comment 17 Karel Zak 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.

Comment 18 Robert Scheck 2007-05-28 07:08:38 EDT
Confirmed to work, closing now.

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