• Florian Westphal's avatar
    mptcp: fix double-unlock in mptcp_poll · e154659b
    Florian Westphal authored
    mptcp_connect/28740 is trying to release lock (sk_lock-AF_INET) at:
    [<ffffffff82c15869>] mptcp_poll+0xb9/0x550
    but there are no more locks to release!
    Call Trace:
     lock_release+0x50f/0x750
     release_sock+0x171/0x1b0
     mptcp_poll+0xb9/0x550
     sock_poll+0x157/0x470
     ? get_net_ns+0xb0/0xb0
     do_sys_poll+0x63c/0xdd0
    
    Problem is that __mptcp_tcp_fallback() releases the mptcp socket lock,
    but after recent change it doesn't do this in all of its return paths.
    
    To fix this, remove the unlock from __mptcp_tcp_fallback() and
    always do the unlock in the caller.
    
    Also add a small comment as to why we have this
    __mptcp_needs_tcp_fallback().
    
    Fixes: 0b4f33de ("mptcp: fix tcp fallback crash")
    Reported-by: syzbot+e56606435b7bfeea8cf5@syzkaller.appspotmail.com
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e154659b
protocol.c 47.7 KB