Skip to content
Snippets Groups Projects
  1. Mar 13, 2011
  2. Mar 12, 2011
  3. Mar 11, 2011
  4. Mar 10, 2011
  5. Mar 09, 2011
    • David S. Miller's avatar
      ipv6: Don't create clones of host routes. · 7343ff31
      David S. Miller authored
      Addresses https://bugzilla.kernel.org/show_bug.cgi?id=29252
      Addresses https://bugzilla.kernel.org/show_bug.cgi?id=30462
      
      
      
      In commit d80bc0fd ("ipv6: Always
      clone offlink routes.") we forced the kernel to always clone offlink
      routes.
      
      The reason we do that is to make sure we never bind an inetpeer to a
      prefixed route.
      
      The logic turned on here has existed in the tree for many years,
      but was always off due to a protecting CPP define.  So perhaps
      it's no surprise that there is a logic bug here.
      
      The problem is that we canot clone a route that is already a
      host route (ie. has DST_HOST set).  Because if we do, an identical
      entry already exists in the routing tree and therefore the
      ip6_rt_ins() call is going to fail.
      
      This sets off a series of failures and high cpu usage, because when
      ip6_rt_ins() fails we loop retrying this operation a few times in
      order to handle a race between two threads trying to clone and insert
      the same host route at the same time.
      
      Fix this by simply using the route as-is when DST_HOST is set.
      
      Reported-by: default avatar <slash@ac.auone-net.jp>
      Reported-by: default avatarErnst Sjöstrand <ernstp@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7343ff31
Loading