| From foo@baz Sat 16 May 2020 02:04:40 PM CEST |
| From: Kelly Littlepage <kelly@onechronos.com> |
| Date: Fri, 8 May 2020 19:58:46 +0000 |
| Subject: net: tcp: fix rx timestamp behavior for tcp_recvmsg |
| |
| From: Kelly Littlepage <kelly@onechronos.com> |
| |
| [ Upstream commit cc4de047b33be247f9c8150d3e496743a49642b8 ] |
| |
| The stated intent of the original commit is to is to "return the timestamp |
| corresponding to the highest sequence number data returned." The current |
| implementation returns the timestamp for the last byte of the last fully |
| read skb, which is not necessarily the last byte in the recv buffer. This |
| patch converts behavior to the original definition, and to the behavior of |
| the previous draft versions of commit 98aaa913b4ed ("tcp: Extend |
| SOF_TIMESTAMPING_RX_SOFTWARE to TCP recvmsg") which also match this |
| behavior. |
| |
| Fixes: 98aaa913b4ed ("tcp: Extend SOF_TIMESTAMPING_RX_SOFTWARE to TCP recvmsg") |
| Co-developed-by: Iris Liu <iris@onechronos.com> |
| Signed-off-by: Iris Liu <iris@onechronos.com> |
| Signed-off-by: Kelly Littlepage <kelly@onechronos.com> |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Acked-by: Soheil Hassas Yeganeh <soheil@google.com> |
| Acked-by: Willem de Bruijn <willemb@google.com> |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/tcp.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/net/ipv4/tcp.c |
| +++ b/net/ipv4/tcp.c |
| @@ -2163,13 +2163,15 @@ skip_copy: |
| tp->urg_data = 0; |
| tcp_fast_path_check(sk); |
| } |
| - if (used + offset < skb->len) |
| - continue; |
| |
| if (TCP_SKB_CB(skb)->has_rxtstamp) { |
| tcp_update_recv_tstamps(skb, &tss); |
| cmsg_flags |= 2; |
| } |
| + |
| + if (used + offset < skb->len) |
| + continue; |
| + |
| if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) |
| goto found_fin_ok; |
| if (!(flags & MSG_PEEK)) |