NetBSD-Bugs archive

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

kern/39919: no access to ipip_allow kernel variable via sysctl



>Number:         39919
>Category:       kern
>Synopsis:       no access to ipip_allow kernel variable via sysctl
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Nov 14 13:30:01 +0000 2008
>Originator:     Wolfgang Stukenbrock
>Release:        NetBSD 4.0
>Organization:
Dr. Nagler & Company GmbH
        
>Environment:
        
        
System: NetBSD s040 4.0 NetBSD 4.0 (NSW-S040) #15: Fri Sep 26 14:12:09 CEST 
2008 
wgstuken@s012:/export/NetBSD-4.0/N+C-build/.OBJDIR_amd64/export/NetBSD-4.0/src/sys/arch/amd64/compile/NSW-S040
 amd64
Architecture: x86_64
Machine: amd64
>Description:
        The kernel variable ipip_allow in netipsec/xform_ipip.c controls the 
behaviour of ipip-packets
        with possible spoofed addresses in the FAST_IPSEC implementation.
        The variable gets initialized to 0 - drop all spoofed attemmpts.
        The value 2 will allow processing of such packets, but there is no way 
to access it via sysctl interface.
        There is some code to add it for FreeBSD, but in ipsec_netbsd.c the 
variable is missing.

        The following fix will add this variable to the sysctl interface and 
allow access to it.
        Perhaps some documentation should be updated too, but this variable is 
only present if
        the kernel is compiled with FAST_IPSEC, so I'm not shure where to add 
it in the documentation.
>How-To-Repeat:
        Setup a kernel with FAST_IPSEC and try to change ipip_allow via sysctl. 
You will fail, because it is no available there.
>Fix:
        Here the output of "rcsdiff -u" that will add the missing definition to 
/sys/netipsec/ipsec_netbsd.c.
        remarks:
          I've used the name "allow" for the variable mentioned in a comment in 
sys/netipsec/xform_ipip.c.
          I've used IPSECCTL_DFBIT in the new entry, because I've no better 
idea. IPSECCTL_DFBIT seems to be
          a definitions that stands for itself only, so there should be no side 
effects. There is no other reference to
          this name in the whole source other than  the sysctl definitions. In 
the final fix, perhaps an other value will
          be the better choice ...

CS file: RCS/ipsec_netbsd.c,v
retrieving revision 1.1
diff -u -r1.1 ipsec_netbsd.c
--- ipsec_netbsd.c      2008/11/14 12:58:25     1.1
+++ ipsec_netbsd.c      2008/11/14 13:13:38
@@ -516,6 +516,12 @@
                       NULL, 0, NULL, 0,
                       CTL_NET, PF_INET, IPPROTO_IPIP, CTL_EOL);
        sysctl_createv(clog, 0, NULL, NULL,
+                      CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+                      CTLTYPE_INT, "allow", NULL,
+                      NULL, 0, &ipip_allow, 0,
+                      CTL_NET, PF_INET, IPPROTO_IPIP,
+                      IPSECCTL_DFBIT, CTL_EOL);
+       sysctl_createv(clog, 0, NULL, NULL,
                       CTLFLAG_PERMANENT|CTLFLAG_READONLY,
                       CTLTYPE_STRUCT, "ipip_stats", NULL,
                       NULL, 0, &ipipstat, sizeof(ipipstat),

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index