Message ID | 1459377448-2239-3-git-send-email-soheil.kdev@gmail.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, Mar 30, 2016 at 6:37 PM, Soheil Hassas Yeganeh <soheil.kdev@gmail.com> wrote: > From: Soheil Hassas Yeganeh <soheil@google.com> > > SOF_TIMESTAMPING_OPT_ID is set to get data-independent IDs > to associate timestamps with send calls. For TCP connections, > tp->snd_una is used as the starting point to calculate > relative IDs. > > This socket option will fail if set before the handshake on a > passive TCP fast open connection with data in SYN or SYN/ACK, > since setsockopt requires the connection to be in the > ESTABLISHED state. > > To address these, instead of limiting the option to the > ESTABLISHED state, accept the SOF_TIMESTAMPING_OPT_ID option as > long as the connection is not in LISTEN or CLOSE states. > > Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> Acked-by: Willem de Bruijn <willemb@google.com>
On Wed, Mar 30, 2016 at 8:35 PM, Willem de Bruijn <willemdebruijn.kernel@gmail.com> wrote: > On Wed, Mar 30, 2016 at 6:37 PM, Soheil Hassas Yeganeh > <soheil.kdev@gmail.com> wrote: >> From: Soheil Hassas Yeganeh <soheil@google.com> >> >> SOF_TIMESTAMPING_OPT_ID is set to get data-independent IDs >> to associate timestamps with send calls. For TCP connections, >> tp->snd_una is used as the starting point to calculate >> relative IDs. >> >> This socket option will fail if set before the handshake on a >> passive TCP fast open connection with data in SYN or SYN/ACK, >> since setsockopt requires the connection to be in the >> ESTABLISHED state. >> >> To address these, instead of limiting the option to the >> ESTABLISHED state, accept the SOF_TIMESTAMPING_OPT_ID option as >> long as the connection is not in LISTEN or CLOSE states. >> >> Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> > > Acked-by: Willem de Bruijn <willemb@google.com> Acked-by: Yuchung Cheng <ycheng@google.com>
diff --git a/net/core/sock.c b/net/core/sock.c index 66976f8..0a64fe2 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -832,7 +832,8 @@ set_rcvbuf: !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) { if (sk->sk_protocol == IPPROTO_TCP && sk->sk_type == SOCK_STREAM) { - if (sk->sk_state != TCP_ESTABLISHED) { + if ((1 << sk->sk_state) & + (TCPF_CLOSE | TCPF_LISTEN)) { ret = -EINVAL; break; }