netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Abeni <pabeni@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>,
	Mat Martineau <mathew.j.martineau@linux.intel.com>,
	netdev@vger.kernel.org, mptcp@lists.01.org
Subject: Re: [MPTCP] Re: [PATCH net-next 09/11] tcp: Check for filled TCP option space before SACK
Date: Mon, 16 Dec 2019 13:52:12 +0100	[thread overview]
Message-ID: <b9833b748f61c043a2827daee060d4ad4171996e.camel@redhat.com> (raw)
In-Reply-To: <47545b88-94db-e9cd-2f9f-2c6d665246e2@gmail.com>

Hi,

On Fri, 2019-12-13 at 15:22 -0800, Eric Dumazet wrote:
> 
> On 12/13/19 3:00 PM, Mat Martineau wrote:
> > The SACK code would potentially add four bytes to the expected
> > TCP option size even if all option space was already used.
> > 
> > Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> > ---
> >  net/ipv4/tcp_output.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
> > index 9e04d45bc0e4..710ab45badfa 100644
> > --- a/net/ipv4/tcp_output.c
> > +++ b/net/ipv4/tcp_output.c
> > @@ -748,6 +748,9 @@ static unsigned int tcp_established_options(struct sock *sk, struct sk_buff *skb
> >  		size += TCPOLEN_TSTAMP_ALIGNED;
> >  	}
> >  
> > +	if (size + TCPOLEN_SACK_BASE_ALIGNED >= MAX_TCP_OPTION_SPACE)
> > +		return size;
> > +
> >  	eff_sacks = tp->rx_opt.num_sacks + tp->rx_opt.dsack;
> >  	if (unlikely(eff_sacks)) {
> >  		const unsigned int remaining = MAX_TCP_OPTION_SPACE - size;
> > 
> 
> Hmmm... I thought I already fixed this issue ?
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9424e2e7ad93ffffa88f882c9bc5023570904b55
> 
> Please do not mix fixes (targeting net tree) in a patch series targeting net-next

Thank you for the feedback!

Unfortunatelly, the above commit is not enough when MPTCP is enabled,
as, without this patch, we can reach the following code:

		const unsigned int remaining = MAX_TCP_OPTION_SPACE - size;
		opts->num_sack_blocks =
			min_t(unsigned int, eff_sacks,
			      (remaining - TCPOLEN_SACK_BASE_ALIGNED) /
			      TCPOLEN_SACK_PERBLOCK);

with 'size == MAX_TCP_OPTION_SPACE' and num_sack_blocks will be
miscalculated. So we need 'fix' but only for MPTCP/when MPTCP is
enabled. Still ok for a -net commit?

Additionally we can clean-up the fix a bit, using something alike the
following, so that it will never add an additional branching
istruction.

---
+               if (unlikely(remaining < TCPOLEN_SACK_BASE_ALIGNED +
+                                        TCPOLEN_SACK_PERBLOCK))
+                       return size;
+
                opts->num_sack_blocks =
                        min_t(unsigned int, eff_sacks,
                              (remaining - TCPOLEN_SACK_BASE_ALIGNED) /
                              TCPOLEN_SACK_PERBLOCK);
-               if (likely(opts->num_sack_blocks))
-                       size += TCPOLEN_SACK_BASE_ALIGNED +
-                               opts->num_sack_blocks * TCPOLEN_SACK_PERBLOCK;
+
+               size += TCPOLEN_SACK_BASE_ALIGNED +
+                       opts->num_sack_blocks * TCPOLEN_SACK_PERBLOCK;
---

Thank you!

Paolo


  parent reply	other threads:[~2019-12-16 12:52 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-13 23:00 [PATCH net-next 00/11] Multipath TCP: Prerequisites Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 01/11] net: Make sock protocol value checks more specific Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 02/11] sock: Make sk_protocol a 16-bit value Mat Martineau
2019-12-13 23:16   ` Eric Dumazet
2019-12-14  0:06     ` Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 03/11] tcp: Define IPPROTO_MPTCP Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 04/11] tcp: Add MPTCP option number Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 05/11] tcp, ulp: Add clone operation to tcp_ulp_ops Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 06/11] mptcp: Add MPTCP to skb extensions Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 07/11] tcp: Prevent coalesce/collapse when skb has MPTCP extensions Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 08/11] tcp: Export TCP functions and ops struct Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 09/11] tcp: Check for filled TCP option space before SACK Mat Martineau
2019-12-13 23:22   ` Eric Dumazet
2019-12-14  0:28     ` Mat Martineau
2019-12-16 12:52     ` Paolo Abeni [this message]
2019-12-16 16:55       ` [MPTCP] " Eric Dumazet
2019-12-16 17:28         ` Paolo Abeni
2019-12-13 23:00 ` [PATCH net-next 10/11] tcp: clean ext on tx recycle Mat Martineau
2019-12-13 23:00 ` [PATCH net-next 11/11] skb: add helpers to allocate ext independently from sk_buff Mat Martineau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b9833b748f61c043a2827daee060d4ad4171996e.camel@redhat.com \
    --to=pabeni@redhat.com \
    --cc=eric.dumazet@gmail.com \
    --cc=mathew.j.martineau@linux.intel.com \
    --cc=mptcp@lists.01.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).