Issue #613 has been updated by martin1234.

Description updated

Download mozilla firefox latest version,it is very high concept application,but 
millions over users use use this app https://foxdownload.org i have used this 
firefox mozilla and i have giving the 5 star to this app.

----------------------------------------
Bug #613: Disable IPv6 routing header type 0 processing by default
http://bugs.dragonflybsd.org/issues/613#change-13564

* Author: hasso
* Status: Closed
* Priority: High
* Assignee: 
* Category: 
* Target version: 
----------------------------------------
# HG changeset patch
# User Hasso Tepper <[email protected]>
# Date 1177505095 -10800
# Node ID 5894d6680d6f85add6e67ccd49884e0a9cf0fc28
# Parent  30ce41c909d51d7afe754705122a706b810c0124
Disable IPv6 routing header type 0 processing by default.

In the light of http://www.secdev.org/conf/IPv6_RH_security-csw07.pdf
introduce new sysctl net.inet6.ip6.rht0. Possible (sensible) values:

-1: no IPv6 routing header type 0 processing (default)
 0: IPv6 routing headers type 0 are processed only in router
 1: IPv6 routing headers type 0 are processed always

The idea obtained from NetBSD.

diff -r 30ce41c909d5 -r 5894d6680d6f sys/netinet6/in6_proto.c
--- a/sys/netinet6/in6_proto.c  Wed Apr 25 15:22:00 2007 +0300
+++ b/sys/netinet6/in6_proto.c  Wed Apr 25 15:44:55 2007 +0300
@@ -300,6 +300,7 @@ int ip6_rr_prune = 5;       /* router renumber
 int    ip6_rr_prune = 5;       /* router renumbering prefix
                                 * walk list every 5 sec.    */
 int    ip6_v6only = 1;
+int    ip6_rht0 = -1;          /* routing header type 0 processing disabled */

 u_int32_t ip6_id = 0UL;
 int    ip6_keepfaith = 0;
@@ -430,6 +431,8 @@ SYSCTL_OID(_net_inet6_ip6, IPV6CTL_TEMPV
           sysctl_ip6_tempvltime, "I", "");
 SYSCTL_INT(_net_inet6_ip6, IPV6CTL_V6ONLY,
        v6only, CTLFLAG_RW,     &ip6_v6only,                    0, "");
+SYSCTL_INT(_net_inet6_ip6, OID_AUTO,
+       rht0, CTLFLAG_RW,       &ip6_rht0,                      0, "");
 SYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_LINKLOCAL,
        auto_linklocal, CTLFLAG_RW, &ip6_auto_linklocal,        0, "");
 SYSCTL_STRUCT(_net_inet6_ip6, IPV6CTL_RIP6STATS, rip6stats, CTLFLAG_RD,
diff -r 30ce41c909d5 -r 5894d6680d6f sys/netinet6/ip6_var.h
--- a/sys/netinet6/ip6_var.h    Wed Apr 25 15:22:00 2007 +0300
+++ b/sys/netinet6/ip6_var.h    Wed Apr 25 15:44:55 2007 +0300
@@ -295,6 +295,7 @@ extern int   ip6_lowportmax;                /* maximum
 extern int   ip6_lowportmax;           /* maximum reserved port */

 extern int     ip6_use_tempaddr; /* whether to use temporary addresses. */
+extern int     ip6_rht0;               /* processing routing header type 0 */

 extern struct pfil_head inet6_pfil_hook;

diff -r 30ce41c909d5 -r 5894d6680d6f sys/netinet6/route6.c
--- a/sys/netinet6/route6.c     Wed Apr 25 15:22:00 2007 +0300
+++ b/sys/netinet6/route6.c     Wed Apr 25 15:44:55 2007 +0300
@@ -75,32 +75,36 @@ route6_input(struct mbuf **mp, int *offp

        switch (rh->ip6r_type) {
        case IPV6_RTHDR_TYPE_0:
-               rhlen = (rh->ip6r_len + 1) << 3;
+               if ((ip6_forwarding && ip6_rht0 == 0) || ip6_rht0 > 0) {
+                       rhlen = (rh->ip6r_len + 1) << 3;
 #ifndef PULLDOWN_TEST
-               /*
-                * note on option length:
-                * due to IP6_EXTHDR_CHECK assumption, we cannot handle
-                * very big routing header (max rhlen == 2048).
-                */
-               IP6_EXTHDR_CHECK(m, off, rhlen, IPPROTO_DONE);
-#else
-               /*
-                * note on option length:
-                * maximum rhlen: 2048
-                * max mbuf m_pulldown can handle: MCLBYTES == usually 2048
-                * so, here we are assuming that m_pulldown can handle
-                * rhlen == 2048 case.  this may not be a good thing to
-                * assume - we may want to avoid pulling it up altogether.
-                */
-               IP6_EXTHDR_GET(rh, struct ip6_rthdr *, m, off, rhlen);
-               if (rh == NULL) {
-                       ip6stat.ip6s_tooshort++;
-                       return IPPROTO_DONE;
+                       /*
+                        * note on option length:
+                        * due to IP6_EXTHDR_CHECK assumption, we cannot handle
+                        * very big routing header (max rhlen == 2048).
+                        */
+                       IP6_EXTHDR_CHECK(m, off, rhlen, IPPROTO_DONE);
+#else
+                       /*
+                        * note on option length:
+                        * maximum rhlen: 2048
+                        * max mbuf m_pulldown can handle: MCLBYTES == usually
+                        * 2048 so, here we are assuming that m_pulldown can
+                        * handle rhlen == 2048 case.  this may not be a good
+                        * thing to assume - we may want to avoid pulling it
+                        * up altogether.
+                        */
+                       IP6_EXTHDR_GET(rh, struct ip6_rthdr *, m, off, rhlen);
+                       if (rh == NULL) {
+                               ip6stat.ip6s_tooshort++;
+                               return IPPROTO_DONE;
+                       }
+#endif
+                       if (ip6_rthdr0(m, ip6, (struct ip6_rthdr0 *)rh))
+                               return (IPPROTO_DONE);
+                       break;
                }
-#endif
-               if (ip6_rthdr0(m, ip6, (struct ip6_rthdr0 *)rh))
-                       return (IPPROTO_DONE);
-               break;
+               /* FALLTHROUGH */
        default:
                /* unknown routing type */
                if (rh->ip6r_segleft == 0) {



-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://bugs.dragonflybsd.org/my/account

Reply via email to