• M
    ipv6: Initialize rt6_info properly in ip6_blackhole_route() · 0a1f5962
    Martin KaFai Lau 提交于
    ip6_blackhole_route() does not initialize the newly allocated
    rt6_info properly.  This patch:
    1. Call rt6_info_init() to initialize rt6i_siblings and rt6i_uncached
    
    2. The current rt->dst._metrics init code is incorrect:
       - 'rt->dst._metrics = ort->dst._metris' is not always safe
       - Not sure what dst_copy_metrics() is trying to do here
         considering ip6_rt_blackhole_cow_metrics() always returns
         NULL
    
       Fix:
       - Always do dst_copy_metrics()
       - Replace ip6_rt_blackhole_cow_metrics() with
         dst_cow_metrics_generic()
    
    3. Mask out the RTF_PCPU bit from the newly allocated blackhole route.
       This bug triggers an oops (reported by Phil Sutter) in rt6_get_cookie().
       It is because RTF_PCPU is set while rt->dst.from is NULL.
    
    Fixes: d52d3997 ("ipv6: Create percpu rt6_info")
    Signed-off-by: NMartin KaFai Lau <kafai@fb.com>
    Reported-by: NPhil Sutter <phil@nwl.cc>
    Tested-by: NPhil Sutter <phil@nwl.cc>
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Cc: Julian Anastasov <ja@ssi.bg>
    Cc: Phil Sutter <phil@nwl.cc>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    0a1f5962
route.c 90.0 KB