Skip to contentSkip to conversation

New: /proc/sys/net/ipv6 has two neigh folders

Bugme-new Andrew Morton 2 participants 2 messages Mar 16, 2011 – Mar 17, 2011 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#1 lore raw
In reply to a message not in the archive

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 65 lines · On Wed, 16 Mar 2011 22:06:34 GMT [email protected] wrote:

https://bugzilla.kernel.org/show_bug.cgi?id=31232

           Summary: /proc/sys/net/ipv6 has two neigh folders
           Product: Networking
           Version: 2.5
    Kernel Version: 2.6.38
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: low
          Priority: P1
         Component: IPV6
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: No

I noticed when looking for other things that there are two neigh folders in /proc/sys/net/ipv6

Reverting this commit removes the extra neigh folder:
http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commitdiff;h=bf36076a67db6d7423d09d861a072337866f0dd9

I don't know how to fix this.
I tried removing the ',' on the row '.child = empty,' (looking at the other rows it did seem like a typo to me).

This did not change anything that I could see though.

Here is the commit I believe introduced the bug:

net/ipv6/sysctl_net_ipv6.c +8 -1
@@ -15,6 +15,8 @@
 #include <net/addrconf.h>
 #include <net/inet_frag.h>
 
+static struct ctl_table empty[1];
+
 static ctl_table ipv6_table_template[] = {
        {
                .procname       = "route",
@@ -35,6 +37,12 @@ static ctl_table ipv6_table_template[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec
        },
+       {
+               .procname       = "neigh",
+               .maxlen         = 0,
+               .mode           = 0555,
+               .child          = empty,
+       },
        { }
 };
 
@@ -152,7 +160,6 @@ static struct ctl_table_header *ip6_base;
 
 int ipv6_static_sysctl_register(void)
 {
-       static struct ctl_table empty[1];
        ip6_base = register_sysctl_paths(net_ipv6_ctl_path, empty);
        if (ip6_base == NULL)
                return -ENOMEM;
#2 lore raw
Quoted 37 lines · Andrew Morton

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 31 lines · On Wed, 16 Mar 2011 22:06:34 GMT [email protected] wrote:

https://bugzilla.kernel.org/show_bug.cgi?id=31232

           Summary: /proc/sys/net/ipv6 has two neigh folders
           Product: Networking
           Version: 2.5
    Kernel Version: 2.6.38
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: low
          Priority: P1
         Component: IPV6
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: No

I noticed when looking for other things that there are two neigh folders in /proc/sys/net/ipv6

Reverting this commit removes the extra neigh folder:
http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commitdiff;h=bf36076a67db6d7423d09d861a072337866f0dd9

I don't know how to fix this.
I tried removing the ',' on the row '.child = empty,' (looking at the other rows it did seem like a typo to me).

This did not change anything that I could see though.

Here is the commit I believe introduced the bug:

Interesting.

This is definitely a bug. I suspect it may be another symptom of the bug I was trying to fix. Something somewhere is messed up with the neigh directory.

That extra neigh entry should serve as a mount point for any later neigh entries that are registered, so the change should be fine.

I will see if I can make the time to look into this, as this new symptom looks as nasty as the use after free problems I was seeing earlier.

Eric

Quoted 33 lines
Quoted 33 lines
net/ipv6/sysctl_net_ipv6.c +8 -1
@@ -15,6 +15,8 @@
 #include <net/addrconf.h>
 #include <net/inet_frag.h>
 
+static struct ctl_table empty[1];
+
 static ctl_table ipv6_table_template[] = {
        {
                .procname       = "route",
@@ -35,6 +37,12 @@ static ctl_table ipv6_table_template[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec
        },
+       {
+               .procname       = "neigh",
+               .maxlen         = 0,
+               .mode           = 0555,
+               .child          = empty,
+       },
        { }
 };
 
@@ -152,7 +160,6 @@ static struct ctl_table_header *ip6_base;
 
 int ipv6_static_sysctl_register(void)
 {
-       static struct ctl_table empty[1];
        ip6_base = register_sysctl_paths(net_ipv6_ctl_path, empty);
        if (ip6_base == NULL)
                return -ENOMEM;