lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 70/90] Revert "ipv6: add mtu lock check in __ip6_rt_update_pmtu"
    Date
    From: "Maciej Żenczykowski" <maze@google.com>

    [ Upstream commit 09454fd0a4ce23cb3d8af65066c91a1bf27120dd ]

    This reverts commit 19bda36c4299ce3d7e5bce10bebe01764a655a6d:

    | ipv6: add mtu lock check in __ip6_rt_update_pmtu
    |
    | Prior to this patch, ipv6 didn't do mtu lock check in ip6_update_pmtu.
    | It leaded to that mtu lock doesn't really work when receiving the pkt
    | of ICMPV6_PKT_TOOBIG.
    |
    | This patch is to add mtu lock check in __ip6_rt_update_pmtu just as ipv4
    | did in __ip_rt_update_pmtu.

    The above reasoning is incorrect. IPv6 *requires* icmp based pmtu to work.
    There's already a comment to this effect elsewhere in the kernel:

    $ git grep -p -B1 -A3 'RTAX_MTU lock'
    net/ipv6/route.c=4813=

    static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg)
    ...
    /* In IPv6 pmtu discovery is not optional,
    so that RTAX_MTU lock cannot disable it.
    We still use this lock to block changes
    caused by addrconf/ndisc.
    */

    This reverts to the pre-4.9 behaviour.

    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Cc: Xin Long <lucien.xin@gmail.com>
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: Maciej Żenczykowski <maze@google.com>
    Fixes: 19bda36c4299 ("ipv6: add mtu lock check in __ip6_rt_update_pmtu")
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv6/route.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    --- a/net/ipv6/route.c
    +++ b/net/ipv6/route.c
    @@ -1373,8 +1373,10 @@ static void __ip6_rt_update_pmtu(struct
    {
    struct rt6_info *rt6 = (struct rt6_info *)dst;

    - if (dst_metric_locked(dst, RTAX_MTU))
    - return;
    + /* Note: do *NOT* check dst_metric_locked(dst, RTAX_MTU)
    + * IPv6 pmtu discovery isn't optional, so 'mtu lock' cannot disable it.
    + * [see also comment in rt6_mtu_change_route()]
    + */

    dst_confirm(dst);
    mtu = max_t(u32, mtu, IPV6_MIN_MTU);

    \
     
     \ /
      Last update: 2020-05-18 19:45    [W:4.204 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site