• Yonglong Li's avatar
    mptcp: Fix crash due to tcp_tsorted_anchor was initialized before release skb · 3ef3905a
    Yonglong Li authored
    Got crash when doing pressure test of mptcp:
    
    ===========================================================================
    dst_release: dst:ffffa06ce6e5c058 refcnt:-1
    kernel tried to execute NX-protected page - exploit attempt? (uid: 0)
    BUG: unable to handle kernel paging request at ffffa06ce6e5c058
    PGD 190a01067 P4D 190a01067 PUD 43fffb067 PMD 22e403063 PTE 8000000226e5c063
    Oops: 0011 [#1] SMP PTI
    CPU: 7 PID: 7823 Comm: kworker/7:0 Kdump: loaded Tainted: G            E
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.2.1 04/01/2014
    Call Trace:
     ? skb_release_head_state+0x68/0x100
     ? skb_release_all+0xe/0x30
     ? kfree_skb+0x32/0xa0
     ? mptcp_sendmsg_frag+0x57e/0x750
     ? __mptcp_retrans+0x21b/0x3c0
     ? __switch_to_asm+0x35/0x70
     ? mptcp_worker+0x25e/0x320
     ? process_one_work+0x1a7/0x360
     ? worker_thread+0x30/0x390
     ? create_worker+0x1a0/0x1a0
     ? kthread+0x112/0x130
     ? kthread_flush_work_fn+0x10/0x10
     ? ret_from_fork+0x35/0x40
    ===========================================================================
    
    In __mptcp_alloc_tx_skb skb was allocated and skb->tcp_tsorted_anchor will
    be initialized, in under memory pressure situation sk_wmem_schedule will
    return false and then kfree_skb. In this case skb->_skb_refdst is not null
    because_skb_refdst and tcp_tsorted_anchor are stored in the same mem, and
    kfree_skb will try to release dst and cause crash.
    
    Fixes: f70cad10 ("mptcp: stop relying on tcp_tx_skb_cache")
    Reviewed-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: default avatarYonglong Li <liyonglong@chinatelecom.cn>
    Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
    Link: https://lore.kernel.org/r/20220317220953.426024-1-mathew.j.martineau@linux.intel.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    3ef3905a
protocol.c 94.1 KB