lkml.org 
[lkml]   [2021]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 042/152] mptcp: fix poll after shutdown
    Date
    From: Paolo Abeni <pabeni@redhat.com>

    [ Upstream commit dd913410b0a442a53d41a9817ed2208850858e99 ]

    The current mptcp_poll() implementation gives unexpected
    results after shutdown(SEND_SHUTDOWN) and when the msk
    status is TCP_CLOSE.

    Set the correct mask.

    Fixes: 8edf08649eed ("mptcp: rework poll+nospace handling")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/mptcp/protocol.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
    index f588332eebb4..44b8868f0607 100644
    --- a/net/mptcp/protocol.c
    +++ b/net/mptcp/protocol.c
    @@ -3320,7 +3320,7 @@ static __poll_t mptcp_check_writeable(struct mptcp_sock *msk)
    struct sock *sk = (struct sock *)msk;

    if (unlikely(sk->sk_shutdown & SEND_SHUTDOWN))
    - return 0;
    + return EPOLLOUT | EPOLLWRNORM;

    if (sk_stream_is_writeable(sk))
    return EPOLLOUT | EPOLLWRNORM;
    @@ -3353,6 +3353,8 @@ static __poll_t mptcp_poll(struct file *file, struct socket *sock,
    mask |= mptcp_check_readable(msk);
    mask |= mptcp_check_writeable(msk);
    }
    + if (sk->sk_shutdown == SHUTDOWN_MASK || state == TCP_CLOSE)
    + mask |= EPOLLHUP;
    if (sk->sk_shutdown & RCV_SHUTDOWN)
    mask |= EPOLLIN | EPOLLRDNORM | EPOLLRDHUP;

    --
    2.30.1


    \
     
     \ /
      Last update: 2021-04-05 11:41    [W:2.311 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site