• J
    xfrm: fix MTU regression · 52dfb991
    Jiri Bohac 提交于
    stable inclusion
    from linux-4.19.233
    commit 20fe64c54412ca42efb9ba07f856ed8cac6e007e
    category: bugfix
    bugzilla: https://gitee.com/openeuler/kernel/issues/I5646A
    CVE: NA
    
    --------------------------------
    
    commit 6596a022 upstream.
    
    Commit 749439bf ("ipv6: fix udpv6
    sendmsg crash caused by too small MTU") breaks PMTU for xfrm.
    
    A Packet Too Big ICMPv6 message received in response to an ESP
    packet will prevent all further communication through the tunnel
    if the reported MTU minus the ESP overhead is smaller than 1280.
    
    E.g. in a case of a tunnel-mode ESP with sha256/aes the overhead
    is 92 bytes. Receiving a PTB with MTU of 1371 or less will result
    in all further packets in the tunnel dropped. A ping through the
    tunnel fails with "ping: sendmsg: Invalid argument".
    
    Apparently the MTU on the xfrm route is smaller than 1280 and
    fails the check inside ip6_setup_cork() added by 749439bf.
    
    We found this by debugging USGv6/ipv6ready failures. Failing
    tests are: "Phase-2 Interoperability Test Scenario IPsec" /
    5.3.11 and 5.4.11 (Tunnel Mode: Fragmentation).
    
    Commit b515d263 ("xfrm:
    xfrm_state_mtu should return at least 1280 for ipv6") attempted
    to fix this but caused another regression in TCP MSS calculations
    and had to be reverted.
    
    The patch below fixes the situation by dropping the MTU
    check and instead checking for the underflows described in the
    749439bf commit message.
    Signed-off-by: NJiri Bohac <jbohac@suse.cz>
    Fixes: 749439bf ("ipv6: fix udpv6 sendmsg crash caused by too small MTU")
    Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NYongqiang Liu <liuyongqiang13@huawei.com>
    52dfb991
ip6_output.c 46.4 KB