On Wed, 2021-01-20 at 11:40 +0100, Paolo Abeni wrote:
quoted hunk ↗ jump to hunk
@@ -428,6 +429,7 @@ static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops;
static struct inet_connection_sock_af_ops subflow_v6_specific;
static struct inet_connection_sock_af_ops subflow_v6m_specific;
+static struct proto tcpv6_prot_override;
static int subflow_v6_conn_request(struct sock *sk, struct sk_buff *skb)
{@@ -509,6 +511,14 @@ static void subflow_ulp_fallback(struct sock *sk,
icsk->icsk_ulp_ops = NULL;
rcu_assign_pointer(icsk->icsk_ulp_data, NULL);
tcp_sk(sk)->is_mptcp = 0;
+
+ /* undo override */
+#if IS_ENABLED(CONFIG_MPTCP_IPV6)
+ if (sk->sk_prot == &tcpv6_prot_override)
+ sk->sk_prot = &tcpv6_prot;
+ else
+#endif
+ sk->sk_prot = &tcp_prot;
CI just spotted an UaF due this patch. We need to do the above also at
ULP release time. I'll send a v2 soon.
Sorry for the noise.
Paolo