]> git.baikalelectronics.ru Git - kernel.git/commit
net: replace dst_cache ip6_tunnel implementation with the generic one
authorPaolo Abeni <pabeni@redhat.com>
Fri, 12 Feb 2016 14:43:54 +0000 (15:43 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Feb 2016 01:21:48 +0000 (20:21 -0500)
commit400f3b34cf42fd978da60bda3a566c0345bdf928
treecbd77f4026a4388bab852d0f78d0452f22a82157
parent9ef7988cacb5599b2a11104740d719385ebbd48f
net: replace dst_cache ip6_tunnel implementation with the generic one

This also fix a potential race into the existing tunnel code, which
could lead to the wrong dst to be permanenty cached:

CPU1: CPU2:
  <xmit on ip6_tunnel>
  <cache lookup fails>
  dst = ip6_route_output(...)
<tunnel params are changed via nl>
dst_cache_reset() // no effect,
// the cache is empty
  dst_cache_set() // the wrong dst
// is permanenty stored
// into the cache

With the new dst implementation the above race is not possible
since the first cache lookup after dst_cache_reset will fail due
to the timestamp check

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip6_tunnel.h
net/ipv6/Kconfig
net/ipv6/ip6_gre.c
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_vti.c