1. 11 10月, 2007 4 次提交
  2. 08 10月, 2007 1 次提交
    • B
      [IPv6]: Fix ICMPv6 redirect handling with target multicast address · bf0b48df
      Brian Haley 提交于
      When the ICMPv6 Target address is multicast, Linux processes the 
      redirect instead of dropping it.  The problem is in this code in 
      ndisc_redirect_rcv():
      
               if (ipv6_addr_equal(dest, target)) {
                       on_link = 1;
               } else if (!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
                       ND_PRINTK2(KERN_WARNING
                                  "ICMPv6 Redirect: target address is not 
      link-local.\n");
                       return;
               }
      
      This second check will succeed if the Target address is, for example, 
      FF02::1 because it has link-local scope.  Instead, it should be checking 
      if it's a unicast link-local address, as stated in RFC 2461/4861 Section 
      8.1:
      
             - The ICMP Target Address is either a link-local address (when
               redirected to a router) or the same as the ICMP Destination
               Address (when redirected to the on-link destination).
      
      I know this doesn't explicitly say unicast link-local address, but it's 
      implied.
      
      This bug is preventing Linux kernels from achieving IPv6 Logo Phase II 
      certification because of a recent error that was found in the TAHI test 
      suite - Neighbor Disovery suite test 206 (v6LC.2.3.6_G) had the 
      multicast address in the Destination field instead of Target field, so 
      we were passing the test.  This won't be the case anymore.
      
      The patch below fixes this problem, and also fixes ndisc_send_redirect() 
      to not send an invalid redirect with a multicast address in the Target 
      field.  I re-ran the TAHI Neighbor Discovery section to make sure Linux 
      passes all 245 tests now.
      Signed-off-by: NBrian Haley <brian.haley@hp.com>
      Acked-by: NDavid L Stevens <dlstevens@us.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bf0b48df
  3. 11 9月, 2007 1 次提交
  4. 23 6月, 2007 1 次提交
  5. 26 4月, 2007 11 次提交
  6. 11 2月, 2007 1 次提交
  7. 31 1月, 2007 1 次提交
    • L
      [IPV6]: fix BUG of ndisc_send_redirect() · 29556526
      Li Yewang 提交于
        When I tested IPv6 redirect function about kernel 2.6.19.1, and found
      that the kernel can send redirect packets whose target address is global
      address, and the target is not the actual endpoint of communication.
      
        But the criteria conform to RFC2461, the target address defines as
      following:
      
        Target Address An IP address that is a better first hop to use for
                       he ICMP Destination Address.  When the target is
                       the actual endpoint of communication, i.e., the
                       destination is a neighbor, the Target Address field
                       MUST contain the same value as the ICMP Destination
                       Address field.  Otherwise the target is a better
                       first-hop router and the Target Address MUST be the
                       router's link-local address so that hosts can
                       uniquely identify routers.
      
      According to this definition, when a router redirect to a host, the
      target address either the better first-hop router's link-local address
      or the same as the ICMP destination address field. But the function of
      ndisc_send_redirect() in net/ipv6/ndisc.c, does not check the target
      address correctly.
      
      There is another definition about receive Redirect message in RFC2461:
      
      8.1.  Validation of Redirect Messages
      
         A host MUST silently discard any received Redirect message that does
         not satisfy all of the following validity checks:
         ......
         - The ICMP Target Address is either a link-local address (when
           redirected to a router) or the same as the ICMP Destination
           Address (when redirected to the on-link destination).
         ......
      
      And the receive redirect function of ndisc_redirect_rcv() implemented
      this definition, checks the target address correctly.
          if (ipv6_addr_equal(dest, target)) {
              on_link = 1;
          } else if (!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
              ND_PRINTK2(KERN_WARNING
                     "ICMPv6 Redirect: target address is not link-local.\n");
              return;
          }
      
      So, I think the send redirect function must check the target address
      also.
      Signed-off-by: NLi Yewang <lyw@nanjing-fnst.com>
      Acked-by: NYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      29556526
  8. 11 12月, 2006 1 次提交
  9. 03 12月, 2006 3 次提交
  10. 06 11月, 2006 1 次提交
  11. 16 10月, 2006 1 次提交
  12. 23 9月, 2006 9 次提交
  13. 01 7月, 2006 1 次提交
  14. 21 3月, 2006 4 次提交