lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20220926232739.76317-5-mathew.j.martineau@linux.intel.com> Date: Mon, 26 Sep 2022 16:27:39 -0700 From: Mat Martineau <mathew.j.martineau@...ux.intel.com> To: netdev@...r.kernel.org Cc: Benjamin Hesmans <benjamin.hesmans@...sares.net>, davem@...emloft.net, kuba@...nel.org, pabeni@...hat.com, edumazet@...gle.com, dmytro@...tyi.net, matthieu.baerts@...sares.net, mptcp@...ts.linux.dev, Mat Martineau <mathew.j.martineau@...ux.intel.com> Subject: [PATCH net-next 4/4] mptcp: poll allow write call before actual connect From: Benjamin Hesmans <benjamin.hesmans@...sares.net> If fastopen is used, poll must allow a first write that will trigger the SYN+data Similar to what is done in tcp_poll(). Acked-by: Paolo Abeni <pabeni@...hat.com> Reviewed-by: Matthieu Baerts <matthieu.baerts@...sares.net> Signed-off-by: Benjamin Hesmans <benjamin.hesmans@...sares.net> Signed-off-by: Mat Martineau <mathew.j.martineau@...ux.intel.com> --- net/mptcp/protocol.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index fc753896caa0..16c3a6fc347f 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3548,6 +3548,7 @@ static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, do_connect: err = ssock->ops->connect(ssock, uaddr, addr_len, flags); + inet_sk(sock->sk)->defer_connect = inet_sk(ssock->sk)->defer_connect; sock->state = ssock->state; /* on successful connect, the msk state will be moved to established by @@ -3698,6 +3699,9 @@ static __poll_t mptcp_poll(struct file *file, struct socket *sock, if (state != TCP_SYN_SENT && state != TCP_SYN_RECV) { mask |= mptcp_check_readable(msk); mask |= mptcp_check_writeable(msk); + } else if (state == TCP_SYN_SENT && inet_sk(sk)->defer_connect) { + /* cf tcp_poll() note about TFO */ + mask |= EPOLLOUT | EPOLLWRNORM; } if (sk->sk_shutdown == SHUTDOWN_MASK || state == TCP_CLOSE) mask |= EPOLLHUP; -- 2.37.3
Powered by blists - more mailing lists