From nobody Mon Sep 21 18:56:49 2026 Received: from out-183.mta0.migadu.com (out-183.mta0.migadu.com [91.218.175.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD72F35E1AE for ; Mon, 27 Jul 2026 02:29:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785119390; cv=none; b=UIvDLYMToLfzY+aOB+GZkD+T//E8GeK9l34ongEyYWQ8ddOIgNQGsABopVHJaemxDX6/XnII1u121WrLM+Aaa3CcM52paZ5X6F31z5fwNDtOUS+tq2UiKQEXr+BFxsPuVYf+tI2vvGI61Y90oOLA1vFZdwTQhrGXbndbg9umgXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785119390; c=relaxed/simple; bh=NGpualsv4UOpTyo+hN51G+tZ+BaArzmrtcF/AKCKp+Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UexLx23mAGbX5YwjW2ilUTSKot3koNvfKGHEU5j8Ix/Z07QK+aZwWKNQgO5m6RxFENNP+4PQsY2hRpQrv8K75I+eZpxpiw2BJFWPZxvirjfJOpzJoyn2P/T3y9hFUTeCu/FXH9WtcKH9aAbOiWERGLfSCdcQC6vxpcLAc0y3N0I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=hIjgTkaV; arc=none smtp.client-ip=91.218.175.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="hIjgTkaV" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1785119386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CkMfPAfuHS8MJ+gAskUwod2pjLBlDeXA+fQFfnpePTk=; b=hIjgTkaVVfuhnChY1YZ0ceis7eHpVecD4gW9fa0diRtIJHFPwMUMHAxExPnjhe0GfHTLjG yly1lyaO0JZ4OzSXqteaqcFNd/TwhLnQRz1z0XU3xZFCG2AOhCXrV8I7q2smOeYplWWHPa jJiaplDTMPLGJK8Agq39tip7xDH2YNk= From: Gang Yan To: mptcp@lists.linux.dev Cc: Gang Yan Subject: [PATCH mptcp-next v3 3/7] mptcp: use sockopt_lock/release_sock in sockopt Date: Mon, 27 Jul 2026 10:28:45 +0800 Message-ID: <20260727022849.20923-4-gang.yan@linux.dev> In-Reply-To: <20260727022849.20923-1-gang.yan@linux.dev> References: <20260727022849.20923-1-gang.yan@linux.dev> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" From: Gang Yan TCP and the core socket layer use sockopt_lock_sock() / sockopt_release_sock() in their setsockopt and getsockopt handlers. Switch the MPTCP socket (msk) level lock_sock()/release_sock() calls to use the BPF-aware wrappers, making the MPTCP sockopt codepaths consistent with the rest of the networking stack. Signed-off-by: Gang Yan --- net/mptcp/sockopt.c | 84 ++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index a7d4135757e7..f00d85809c52 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -78,7 +78,7 @@ static void mptcp_sol_socket_sync_intval(struct mptcp_soc= k *msk, int optname, in struct mptcp_subflow_context *subflow; struct sock *sk =3D (struct sock *)msk; =20 - lock_sock(sk); + sockopt_lock_sock(sk); sockopt_seq_inc(msk); =20 mptcp_for_each_subflow(msk, subflow) { @@ -123,7 +123,7 @@ static void mptcp_sol_socket_sync_intval(struct mptcp_s= ock *msk, int optname, in unlock_sock_fast(ssk, slow); } =20 - release_sock(sk); + sockopt_release_sock(sk); } =20 static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, in= t val) @@ -162,7 +162,7 @@ static int mptcp_setsockopt_sol_socket_tstamp(struct mp= tcp_sock *msk, int optnam if (ret) return ret; =20 - lock_sock(sk); + sockopt_lock_sock(sk); mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 @@ -171,7 +171,7 @@ static int mptcp_setsockopt_sol_socket_tstamp(struct mp= tcp_sock *msk, int optnam release_sock(ssk); } =20 - release_sock(sk); + sockopt_release_sock(sk); return 0; } =20 @@ -237,7 +237,7 @@ static int mptcp_setsockopt_sol_socket_timestamping(str= uct mptcp_sock *msk, if (ret) return ret; =20 - lock_sock(sk); + sockopt_lock_sock(sk); =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); @@ -251,7 +251,7 @@ static int mptcp_setsockopt_sol_socket_timestamping(str= uct mptcp_sock *msk, ret =3D err; } =20 - release_sock(sk); + sockopt_release_sock(sk); =20 return ret; } @@ -276,7 +276,7 @@ static int mptcp_setsockopt_sol_socket_linger(struct mp= tcp_sock *msk, sockptr_t if (ret) return ret; =20 - lock_sock(sk); + sockopt_lock_sock(sk); sockopt_seq_inc(msk); mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); @@ -293,7 +293,7 @@ static int mptcp_setsockopt_sol_socket_linger(struct mp= tcp_sock *msk, sockptr_t unlock_sock_fast(ssk, slow); } =20 - release_sock(sk); + sockopt_release_sock(sk); return 0; } =20 @@ -309,10 +309,10 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_s= ock *msk, int optname, case SO_REUSEADDR: case SO_BINDTODEVICE: case SO_BINDTOIFINDEX: - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D __mptcp_nmpc_sk(msk); if (IS_ERR(ssk)) { - release_sock(sk); + sockopt_release_sock(sk); return PTR_ERR(ssk); } =20 @@ -327,7 +327,7 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_soc= k *msk, int optname, else if (optname =3D=3D SO_BINDTOIFINDEX) sk->sk_bound_dev_if =3D ssk->sk_bound_dev_if; } - release_sock(sk); + sockopt_release_sock(sk); return ret; case SO_KEEPALIVE: case SO_PRIORITY: @@ -405,16 +405,16 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk= , int optname, case IPV6_V6ONLY: case IPV6_TRANSPARENT: case IPV6_FREEBIND: - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D __mptcp_nmpc_sk(msk); if (IS_ERR(ssk)) { - release_sock(sk); + sockopt_release_sock(sk); return PTR_ERR(ssk); } =20 ret =3D tcp_setsockopt(ssk, SOL_IPV6, optname, optval, optlen); if (ret !=3D 0) { - release_sock(sk); + sockopt_release_sock(sk); return ret; } =20 @@ -434,7 +434,7 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, = int optname, break; } =20 - release_sock(sk); + sockopt_release_sock(sk); break; } =20 @@ -611,7 +611,7 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct m= ptcp_sock *msk, sockptr_t cap_net_admin =3D ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN); =20 ret =3D 0; - lock_sock(sk); + sockopt_lock_sock(sk); sockopt_seq_inc(msk); mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); @@ -628,7 +628,7 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct m= ptcp_sock *msk, sockptr_t if (ret =3D=3D 0) strscpy(msk->ca_name, name, sizeof(msk->ca_name)); =20 - release_sock(sk); + sockopt_release_sock(sk); return ret; } =20 @@ -707,11 +707,11 @@ static int mptcp_setsockopt_sol_ip_set(struct mptcp_s= ock *msk, int optname, if (err !=3D 0) return err; =20 - lock_sock(sk); + sockopt_lock_sock(sk); =20 ssk =3D __mptcp_nmpc_sk(msk); if (IS_ERR(ssk)) { - release_sock(sk); + sockopt_release_sock(sk); return PTR_ERR(ssk); } =20 @@ -732,13 +732,13 @@ static int mptcp_setsockopt_sol_ip_set(struct mptcp_s= ock *msk, int optname, READ_ONCE(inet_sk(sk)->local_port_range)); break; default: - release_sock(sk); + sockopt_release_sock(sk); WARN_ON_ONCE(1); return -EOPNOTSUPP; } =20 sockopt_seq_inc(msk); - release_sock(sk); + sockopt_release_sock(sk); return 0; } =20 @@ -754,7 +754,7 @@ static int mptcp_setsockopt_v4_set_tos(struct mptcp_soc= k *msk, int optname, if (err !=3D 0) return err; =20 - lock_sock(sk); + sockopt_lock_sock(sk); sockopt_seq_inc(msk); val =3D READ_ONCE(inet_sk(sk)->tos); mptcp_for_each_subflow(msk, subflow) { @@ -765,7 +765,7 @@ static int mptcp_setsockopt_v4_set_tos(struct mptcp_soc= k *msk, int optname, __ip_sock_set_tos(ssk, val); unlock_sock_fast(ssk, slow); } - release_sock(sk); + sockopt_release_sock(sk); =20 return 0; } @@ -794,7 +794,7 @@ static int mptcp_setsockopt_first_sf_only(struct mptcp_= sock *msk, int level, int int ret; =20 /* Limit to first subflow, before the connection establishment */ - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D __mptcp_nmpc_sk(msk); if (IS_ERR(ssk)) { ret =3D PTR_ERR(ssk); @@ -804,7 +804,7 @@ static int mptcp_setsockopt_first_sf_only(struct mptcp_= sock *msk, int level, int ret =3D tcp_setsockopt(ssk, level, optname, optval, optlen); =20 unlock: - release_sock(sk); + sockopt_release_sock(sk); return ret; } =20 @@ -857,7 +857,7 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, if (ret) return ret; =20 - lock_sock(sk); + sockopt_lock_sock(sk); switch (optname) { case TCP_INQ: if (val < 0 || val > 1) @@ -896,7 +896,7 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *= msk, int optname, ret =3D -ENOPROTOOPT; } =20 - release_sock(sk); + sockopt_release_sock(sk); return ret; } =20 @@ -920,9 +920,9 @@ int mptcp_setsockopt(struct sock *sk, int level, int op= tname, * is in TCP fallback, when TCP socket options are passed through * to the one remaining subflow. */ - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D __mptcp_tcp_fallback(msk); - release_sock(sk); + sockopt_release_sock(sk); if (ssk) return tcp_setsockopt(ssk, level, optname, optval, optlen); =20 @@ -945,7 +945,7 @@ static int mptcp_getsockopt_first_sf_only(struct mptcp_= sock *msk, int level, int struct sock *ssk; int ret; =20 - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D msk->first; if (ssk) goto get; @@ -960,7 +960,7 @@ static int mptcp_getsockopt_first_sf_only(struct mptcp_= sock *msk, int level, int ret =3D tcp_getsockopt(ssk, level, optname, optval, optlen); =20 out: - release_sock(sk); + sockopt_release_sock(sk); return ret; } =20 @@ -1131,7 +1131,7 @@ static int mptcp_getsockopt_tcpinfo(struct mptcp_sock= *msk, char __user *optval, =20 infoptr =3D optval + sfd.size_subflow_data; =20 - lock_sock(sk); + sockopt_lock_sock(sk); =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); @@ -1144,7 +1144,7 @@ static int mptcp_getsockopt_tcpinfo(struct mptcp_sock= *msk, char __user *optval, tcp_get_info(ssk, &info); =20 if (copy_to_user(infoptr, &info, sfd.size_user)) { - release_sock(sk); + sockopt_release_sock(sk); return -EFAULT; } =20 @@ -1154,7 +1154,7 @@ static int mptcp_getsockopt_tcpinfo(struct mptcp_sock= *msk, char __user *optval, } } =20 - release_sock(sk); + sockopt_release_sock(sk); =20 sfd.num_subflows =3D sfcount; =20 @@ -1223,7 +1223,7 @@ static int mptcp_getsockopt_subflow_addrs(struct mptc= p_sock *msk, char __user *o =20 addrptr =3D optval + sfd.size_subflow_data; =20 - lock_sock(sk); + sockopt_lock_sock(sk); =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); @@ -1236,7 +1236,7 @@ static int mptcp_getsockopt_subflow_addrs(struct mptc= p_sock *msk, char __user *o mptcp_get_sub_addrs(ssk, &a); =20 if (copy_to_user(addrptr, &a, sfd.size_user)) { - release_sock(sk); + sockopt_release_sock(sk); return -EFAULT; } =20 @@ -1246,7 +1246,7 @@ static int mptcp_getsockopt_subflow_addrs(struct mptc= p_sock *msk, char __user *o } } =20 - release_sock(sk); + sockopt_release_sock(sk); =20 sfd.num_subflows =3D sfcount; =20 @@ -1332,7 +1332,7 @@ static int mptcp_getsockopt_full_info(struct mptcp_so= ck *msk, char __user *optva sizeof(struct mptcp_subflow_info)); tcpinfoptr =3D u64_to_user_ptr(mfi.tcp_info); =20 - lock_sock(sk); + sockopt_lock_sock(sk); mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct mptcp_subflow_info sfinfo; @@ -1362,7 +1362,7 @@ static int mptcp_getsockopt_full_info(struct mptcp_so= ck *msk, char __user *optva tcpinfoptr +=3D mfi.size_tcpinfo_user; sfinfoptr +=3D mfi.size_sfinfo_user; } - release_sock(sk); + sockopt_release_sock(sk); =20 mfi.num_subflows =3D sfcount; if (mptcp_put_full_info(&mfi, optval, copylen, optlen)) @@ -1371,7 +1371,7 @@ static int mptcp_getsockopt_full_info(struct mptcp_so= ck *msk, char __user *optva return 0; =20 fail_release: - release_sock(sk); + sockopt_release_sock(sk); return -EFAULT; } =20 @@ -1526,9 +1526,9 @@ int mptcp_getsockopt(struct sock *sk, int level, int = optname, * is in TCP fallback, when socket options are passed through * to the one remaining subflow. */ - lock_sock(sk); + sockopt_lock_sock(sk); ssk =3D __mptcp_tcp_fallback(msk); - release_sock(sk); + sockopt_release_sock(sk); if (ssk) return tcp_getsockopt(ssk, level, optname, optval, option); =20 --=20 2.43.0