[BACK]Return to ip6_input.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet6

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/netinet6/ip6_input.c between version 1.37.2.7 and 1.42

version 1.37.2.7, 2001/11/14 19:18:09 version 1.42, 2001/08/06 10:25:01
Line 65 
Line 65 
  *      @(#)ip_input.c  8.2 (Berkeley) 1/4/94   *      @(#)ip_input.c  8.2 (Berkeley) 1/4/94
  */   */
   
 #include <sys/cdefs.h>  
 __KERNEL_RCSID(0, "$NetBSD$");  
   
 #include "opt_inet.h"  #include "opt_inet.h"
 #include "opt_ipsec.h"  #include "opt_ipsec.h"
 #include "opt_pfil_hooks.h"  #include "opt_pfil_hooks.h"
Line 84  __KERNEL_RCSID(0, "$NetBSD$");
Line 81  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/time.h>  #include <sys/time.h>
 #include <sys/kernel.h>  #include <sys/kernel.h>
 #include <sys/syslog.h>  #include <sys/syslog.h>
 #include <sys/lwp.h>  
 #include <sys/proc.h>  #include <sys/proc.h>
 #include <sys/sysctl.h>  
   
 #include <net/if.h>  #include <net/if.h>
 #include <net/if_types.h>  #include <net/if_types.h>
Line 102  __KERNEL_RCSID(0, "$NetBSD$");
Line 97  __KERNEL_RCSID(0, "$NetBSD$");
 #ifdef INET  #ifdef INET
 #include <netinet/ip.h>  #include <netinet/ip.h>
 #include <netinet/ip_icmp.h>  #include <netinet/ip_icmp.h>
 #endif /* INET */  #endif /*INET*/
 #include <netinet/ip6.h>  #include <netinet/ip6.h>
 #include <netinet6/in6_var.h>  #include <netinet6/in6_var.h>
 #include <netinet6/ip6_var.h>  #include <netinet6/ip6_var.h>
Line 121  __KERNEL_RCSID(0, "$NetBSD$");
Line 116  __KERNEL_RCSID(0, "$NetBSD$");
 /* we need it for NLOOP. */  /* we need it for NLOOP. */
 #include "loop.h"  #include "loop.h"
 #include "faith.h"  #include "faith.h"
   
 #include "gif.h"  #include "gif.h"
 #include "bpfilter.h"  #include "bpfilter.h"
   
Line 254  ip6_input(m)
Line 250  ip6_input(m)
 #endif  #endif
   
         /*          /*
          * mbuf statistics           * mbuf statistics by kazu
          */           */
         if (m->m_flags & M_EXT) {          if (m->m_flags & M_EXT) {
                 if (m->m_next)                  if (m->m_next)
Line 265  ip6_input(m)
Line 261  ip6_input(m)
 #define M2MMAX  (sizeof(ip6stat.ip6s_m2m)/sizeof(ip6stat.ip6s_m2m[0]))  #define M2MMAX  (sizeof(ip6stat.ip6s_m2m)/sizeof(ip6stat.ip6s_m2m[0]))
                 if (m->m_next) {                  if (m->m_next) {
                         if (m->m_flags & M_LOOP) {                          if (m->m_flags & M_LOOP) {
                                 ip6stat.ip6s_m2m[loif[0].if_index]++; /* XXX */                                  ip6stat.ip6s_m2m[loif[0].if_index]++;   /*XXX*/
                         } else if (m->m_pkthdr.rcvif->if_index < M2MMAX)                          } else if (m->m_pkthdr.rcvif->if_index < M2MMAX)
                                 ip6stat.ip6s_m2m[m->m_pkthdr.rcvif->if_index]++;                                  ip6stat.ip6s_m2m[m->m_pkthdr.rcvif->if_index]++;
                         else                          else
Line 328  ip6_input(m)
Line 324  ip6_input(m)
         }          }
 #endif /* PFIL_HOOKS */  #endif /* PFIL_HOOKS */
   
   
         ip6stat.ip6s_nxthist[ip6->ip6_nxt]++;          ip6stat.ip6s_nxthist[ip6->ip6_nxt]++;
   
 #ifdef ALTQ  #ifdef ALTQ
           /* XXX Temporary until ALTQ is changed to use a pfil hook */
         if (altq_input != NULL && (*altq_input)(m, AF_INET6) == 0) {          if (altq_input != NULL && (*altq_input)(m, AF_INET6) == 0) {
                 /* packet is dropped by traffic conditioner */                  /* packet is dropped by traffic conditioner */
                 return;                  return;
Line 338  ip6_input(m)
Line 336  ip6_input(m)
 #endif  #endif
   
         /*          /*
          * Check against address spoofing/corruption.           * Scope check
          */           */
         if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_src) ||          if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_src) ||
             IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_dst)) {              IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_dst)) {
Line 347  ip6_input(m)
Line 345  ip6_input(m)
                 goto bad;                  goto bad;
         }          }
         /*          /*
          * The following check is not documented in specs.  A malicious           * The following check is not documented in the spec.  Malicious party
          * party may be able to use IPv4 mapped addr to confuse tcp/udp stack           * may be able to use IPv4 mapped addr to confuse tcp/udp stack and
          * and bypass security checks (act as if it was from 127.0.0.1 by using           * bypass security checks (act as if it was from 127.0.0.1 by using
          * IPv6 src ::ffff:127.0.0.1).  Be cautious.           * IPv6 src ::ffff:127.0.0.1).  Be cautious.
          *           *
          * This check chokes if we are in an SIIT cloud.  As none of BSDs           * This check chokes if we are in SIIT cloud.  As none of BSDs support
          * support IPv4-less kernel compilation, we cannot support SIIT           * IPv4-less kernel compilation, we cannot support SIIT environment
          * environment at all.  So, it makes more sense for us to reject any           * at all.  So, it makes more sense for us to reject any malicious
          * malicious packets for non-SIIT environment, than try to do a           * packets for non-SIIT environment, than try to do a partical support
          * partical support for SIIT environment.           * for SIIT environment.
          */           */
         if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||          if (IN6_IS_ADDR_V4MAPPED(&ip6->ip6_src) ||
             IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {              IN6_IS_ADDR_V4MAPPED(&ip6->ip6_dst)) {
Line 545  ip6_input(m)
Line 543  ip6_input(m)
                  && ip6_forward_rt.ro_rt->rt_ifp->if_type == IFT_FAITH) {                   && ip6_forward_rt.ro_rt->rt_ifp->if_type == IFT_FAITH) {
                         /* XXX do we need more sanity checks? */                          /* XXX do we need more sanity checks? */
                         ours = 1;                          ours = 1;
                         deliverifp = ip6_forward_rt.ro_rt->rt_ifp; /* faith */                          deliverifp = ip6_forward_rt.ro_rt->rt_ifp; /*faith*/
                         goto hbhcheck;                          goto hbhcheck;
                 }                  }
         }          }
Line 1010  ip6_savecontrol(in6p, mp, ip6, m)
Line 1008  ip6_savecontrol(in6p, mp, ip6, m)
         struct ip6_hdr *ip6;          struct ip6_hdr *ip6;
         struct mbuf *m;          struct mbuf *m;
 {  {
         struct proc *p = (curproc ? curproc->l_proc : 0);       /* XXX */          struct proc *p = curproc;       /* XXX */
         int privileged;          int privileged;
   
         privileged = 0;          privileged = 0;
Line 1325  ip6_nexthdr(m, off, proto, nxtp)
Line 1323  ip6_nexthdr(m, off, proto, nxtp)
                 if (nxtp)                  if (nxtp)
                         *nxtp = ip6e.ip6e_nxt;                          *nxtp = ip6e.ip6e_nxt;
                 off += (ip6e.ip6e_len + 2) << 2;                  off += (ip6e.ip6e_len + 2) << 2;
                 if (m->m_pkthdr.len < off)  
                         return -1;  
                 return off;                  return off;
   
         case IPPROTO_HOPOPTS:          case IPPROTO_HOPOPTS:
Line 1338  ip6_nexthdr(m, off, proto, nxtp)
Line 1334  ip6_nexthdr(m, off, proto, nxtp)
                 if (nxtp)                  if (nxtp)
                         *nxtp = ip6e.ip6e_nxt;                          *nxtp = ip6e.ip6e_nxt;
                 off += (ip6e.ip6e_len + 1) << 3;                  off += (ip6e.ip6e_len + 1) << 3;
                 if (m->m_pkthdr.len < off)  
                         return -1;  
                 return off;                  return off;
   
         case IPPROTO_NONE:          case IPPROTO_NONE:
Line 1399  u_char inet6ctlerrmap[PRC_NCMDS] = {
Line 1393  u_char inet6ctlerrmap[PRC_NCMDS] = {
         ENOPROTOOPT          ENOPROTOOPT
 };  };
   
   #include <uvm/uvm_extern.h>
   #include <sys/sysctl.h>
   
 int  int
 ip6_sysctl(name, namelen, oldp, oldlenp, newp, newlen)  ip6_sysctl(name, namelen, oldp, oldlenp, newp, newlen)
         int *name;          int *name;
Line 1456  ip6_sysctl(name, namelen, oldp, oldlenp,
Line 1453  ip6_sysctl(name, namelen, oldp, oldlenp,
                                 &ip6_use_deprecated);                                  &ip6_use_deprecated);
         case IPV6CTL_RR_PRUNE:          case IPV6CTL_RR_PRUNE:
                 return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_rr_prune);                  return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_rr_prune);
         case IPV6CTL_V6ONLY:  #ifndef INET6_BINDV6ONLY
 #ifdef INET6_BINDV6ONLY          case IPV6CTL_BINDV6ONLY:
                 return sysctl_rdint(oldp, oldlenp, newp, ip6_v6only);                  return sysctl_int(oldp, oldlenp, newp, newlen,
 #else                                  &ip6_bindv6only);
                 return sysctl_int(oldp, oldlenp, newp, newlen, &ip6_v6only);  
 #endif  #endif
         case IPV6CTL_ANONPORTMIN:          case IPV6CTL_ANONPORTMIN:
                 old = ip6_anonportmin;                  old = ip6_anonportmin;

Legend:
Removed from v.1.37.2.7  
changed lines
  Added in v.1.42

CVSweb <webmaster@jp.NetBSD.org>