From: Mat Martineau <mathew.j.martineau at linux.intel.com>
To: mptcp at lists.01.org
Subject: [MPTCP] Re: [PATCH net v2] mptcp: fix length of ADD_ADDR with port suboption
Date: Thu, 04 Mar 2021 16:28:54 -0800 [thread overview]
Message-ID: <bc0a1f5-8dc3-6212-7884-4c51b6a61ba@linux.intel.com> (raw)
In-Reply-To: dfea8e080c5e8bbcbeefa64a4b8d7ff2becea639.1614874814.git.dcaratti@redhat.com
[-- Attachment #1: Type: text/plain, Size: 3379 bytes --]
On Thu, 4 Mar 2021, Davide Caratti wrote:
> in current Linux, MPTCP peers advertising endpoints with port numbers use
> a sub-option length that wrongly accounts for the trailing TCP NOP. Also,
> receivers will only process incoming ADD_ADDR with port having such wrong
> sub-option length. Fix this, making ADD_ADDR compliant to RFC8684 §3.4.1.
>
> this can be verified running tcpdump on the kselftests artifacts:
>
> unpatched kernel:
> [root(a)bottarga mptcp]# tcpdump -tnnr unpatched.pcap | grep add-addr
> reading from file unpatched.pcap, link-type LINUX_SLL (Linux cooked v1), snapshot length 65535
> IP 10.0.1.1.10000 > 10.0.1.2.53078: Flags [.], ack 101, win 509, options [nop,nop,TS val 214459678 ecr 521312851,mptcp add-addr v1 id 1 a00:201:2774:2d88:7436:85c3:17fd:101], length 0
> IP 10.0.1.2.53078 > 10.0.1.1.10000: Flags [.], ack 101, win 502, options [nop,nop,TS val 521312852 ecr 214459678,mptcp add-addr[bad opt]]
>
> patched kernel:
> [root(a)bottarga mptcp]# tcpdump -tnnr patched.pcap | grep add-addr
> reading from file patched.pcap, link-type LINUX_SLL (Linux cooked v1), snapshot length 65535
> IP 10.0.1.1.10000 > 10.0.1.2.38178: Flags [.], ack 101, win 509, options [nop,nop,TS val 3728873902 ecr 2732713192,mptcp add-addr v1 id 1 10.0.2.1:10100 hmac 0xbccdfcbe59292a1f,nop,nop], length 0
> IP 10.0.1.2.38178 > 10.0.1.1.10000: Flags [.], ack 101, win 502, options [nop,nop,TS val 2732713195 ecr 3728873902,mptcp add-addr v1-echo id 1 10.0.2.1:10100,nop,nop], length 0
>
> Fixes: 22fb85ffaefb ("mptcp: add port support for ADD_ADDR suboption writing")
> CC: stable(a)vger.kernel.org # 5.11+
> Signed-off-by: Davide Caratti <dcaratti(a)redhat.com>
> ---
> net/mptcp/protocol.h | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 91827d949766..e21a5bc36cf0 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -52,14 +52,15 @@
> #define TCPOLEN_MPTCP_DSS_MAP64 14
> #define TCPOLEN_MPTCP_DSS_CHECKSUM 2
> #define TCPOLEN_MPTCP_ADD_ADDR 16
> -#define TCPOLEN_MPTCP_ADD_ADDR_PORT 20
> +#define TCPOLEN_MPTCP_ADD_ADDR_PORT 18
> #define TCPOLEN_MPTCP_ADD_ADDR_BASE 8
> -#define TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT 12
> +#define TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT 10
> #define TCPOLEN_MPTCP_ADD_ADDR6 28
> -#define TCPOLEN_MPTCP_ADD_ADDR6_PORT 32
> +#define TCPOLEN_MPTCP_ADD_ADDR6_PORT 30
> #define TCPOLEN_MPTCP_ADD_ADDR6_BASE 20
> -#define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT 24
> -#define TCPOLEN_MPTCP_PORT_LEN 4
> +#define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT 22
> +#define TCPOLEN_MPTCP_PORT_LEN 2
> +#define TCPOLEN_MPTCP_PORT_ALIGN 2
> #define TCPOLEN_MPTCP_RM_ADDR_BASE 4
> #define TCPOLEN_MPTCP_PRIO 3
> #define TCPOLEN_MPTCP_PRIO_ALIGN 4
> @@ -701,8 +702,9 @@ static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool port)
> len = TCPOLEN_MPTCP_ADD_ADDR6_BASE;
> if (!echo)
> len += MPTCPOPT_THMAC_LEN;
> + /* account for 2 trailing 'nop' options */
> if (port)
> - len += TCPOLEN_MPTCP_PORT_LEN;
> + len += TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN;
>
> return len;
> }
> --
> 2.29.2
Thanks Davide - fix looks good to me for -net and stable.
Reviewed-by: Mat Martineau <mathew.j.martineau(a)linux.intel.com>
--
Mat Martineau
Intel
next reply other threads:[~2021-03-05 0:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-05 0:28 Mat Martineau [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-03-05 2:14 [MPTCP] Re: [PATCH net v2] mptcp: fix length of ADD_ADDR with port suboption Geliang Tang
2021-03-08 10:49 Matthieu Baerts
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=bc0a1f5-8dc3-6212-7884-4c51b6a61ba@linux.intel.com \
--to=unknown@example.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.