mirror of https://gitee.com/openkylin/linux.git
mptcp: receive checksum for DSS
In mptcp_parse_option, adjust the expected_opsize, and always parse the data checksum value from the receiving DSS regardless of csum presence. Then save it in mp_opt->csum. Co-developed-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Geliang Tang <geliangtang@gmail.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
208e8f6692
commit
390b95a5fb
|
@ -182,10 +182,8 @@ static void mptcp_parse_option(const struct sk_buff *skb,
|
|||
expected_opsize += TCPOLEN_MPTCP_DSS_MAP32;
|
||||
}
|
||||
|
||||
/* RFC 6824, Section 3.3:
|
||||
* If a checksum is present, but its use had
|
||||
* not been negotiated in the MP_CAPABLE handshake,
|
||||
* the checksum field MUST be ignored.
|
||||
/* Always parse any csum presence combination, we will enforce
|
||||
* RFC 8684 Section 3.3.0 checks later in subflow_data_ready
|
||||
*/
|
||||
if (opsize != expected_opsize &&
|
||||
opsize != expected_opsize + TCPOLEN_MPTCP_DSS_CHECKSUM)
|
||||
|
@ -220,9 +218,15 @@ static void mptcp_parse_option(const struct sk_buff *skb,
|
|||
mp_opt->data_len = get_unaligned_be16(ptr);
|
||||
ptr += 2;
|
||||
|
||||
pr_debug("data_seq=%llu subflow_seq=%u data_len=%u",
|
||||
if (opsize == expected_opsize + TCPOLEN_MPTCP_DSS_CHECKSUM) {
|
||||
mp_opt->csum_reqd = 1;
|
||||
mp_opt->csum = (__force __sum16)get_unaligned_be16(ptr);
|
||||
ptr += 2;
|
||||
}
|
||||
|
||||
pr_debug("data_seq=%llu subflow_seq=%u data_len=%u csum=%d:%u",
|
||||
mp_opt->data_seq, mp_opt->subflow_seq,
|
||||
mp_opt->data_len);
|
||||
mp_opt->data_len, mp_opt->csum_reqd, mp_opt->csum);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue