From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta0.migadu.com (out-38.mta0.migadu.com [91.218.175.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB8CC3803DF for ; Mon, 14 Sep 2026 06:59:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.38 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789369151; cv=none; b=LcxBGl+WGNTEQBYY5u2v+uj1360jEkC53sTkzAYe3T9X4BuWr5IMBEodFjMuvbPBow7aH/cWsm8K+eebk1+TL5o7+jQVlM++Ji3eUnu/9THSya5MdgW5LwFIGGTjeuhnjCaDrW8GxwqR56bzn8nIC0HDid3mJfMq8rPKDwHfedM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789369151; c=relaxed/simple; bh=RdI38lPbEJ2mWlXOoSpq+ttdSUBVsk+hP74ijK+MXlI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=JVXbEAJRvy3ckTjofIUNsgENgwCun5ea8d/oxL6xM7zpr7+d0XWdNFFBgCez676Dr/XmvTpsAO7cghTJ6PigeeAGv6UrxeX3oG913TWMqLUe4nNvIlir6FiqDQcF4eQ9A37L1b4gGTMKFUw/zgEs/mEdDCEqZ7yULuH+4qUuELE= 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=FYL2QiVQ; arc=none smtp.client-ip=91.218.175.38 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="FYL2QiVQ" X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=RdI38lPbEJ2mWlXOoSpq+ttdSUBVsk+hP74ijK+MXlI=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1789369146; v=1; x=1789973946; b=FYL2QiVQaL+9H/Qchz2huCcf6O/prrO9MU6XC0B9ovwZY0+K3Gm+jKo+WLJ4xUuZBzzSClDT R5TEXX0LKF2OfjhzX+nx7+DjCfnQhF7ZW5u+a3n/28/3aW600uWAUYsbTaMBKpOICo5NA47RGat vT6Xd7Rz7LQ6ivR/p2I8HAFQ= X-Envelope-To: linux-kernel@vger.kernel.org Received: by mta11.migadu.com with ESMTPS id 2d3a4388d5ce9ab6; Mon, 14 Sep 2026 06:59:06 +0000 X-Mizu-Trace-ID: 2d3a4388d5ce9ab6 X-Migadu-Flow: FLOW_OUT Date: Mon, 14 Sep 2026 14:58:52 +0800 From: Hangbin Liu To: Xuanqiang Luo Cc: netdev@vger.kernel.org, edumazet@google.com, dsahern@kernel.org, idosch@nvidia.com, davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, linux-kernel@vger.kernel.org, luoxuanqiang@kylinos.cn Subject: Re: [PATCH net-next v2] ipv6: make IPV6_FREEBIND and IPV6_TRANSPARENT setsockopt lockless Message-ID: References: <20260912134040.215664-1-xuanqiang.luo@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260912134040.215664-1-xuanqiang.luo@linux.dev> On Sat, Sep 12, 2026 at 09:40:40PM +0800, Xuanqiang Luo wrote: > From: Xuanqiang Luo > > IPV6_FREEBIND and IPV6_TRANSPARENT still take the socket lock despite > using inet_assign_bit() to update the flags shared with IP_FREEBIND > and IP_TRANSPARENT. IPv6 TCP and UDP sockets can already update these > flags without the lock through the corresponding SOL_IP options. > > Move both options to the lockless setsockopt path. > > Signed-off-by: Xuanqiang Luo > --- > Changes: > v2: > - Squash the two patches into one and drop the cover letter. > (Eric Dumazet.) > > v1: https://lore.kernel.org/all/20260911102418.157071-1-xuanqiang.luo@linux.dev/ > > net/ipv6/ipv6_sockglue.c | 36 +++++++++++++++--------------------- > 1 file changed, 15 insertions(+), 21 deletions(-) > > diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c > index 1f68fb64a43ef..4b3536571c980 100644 > --- a/net/ipv6/ipv6_sockglue.c > +++ b/net/ipv6/ipv6_sockglue.c > @@ -398,6 +398,21 @@ int do_ipv6_setsockopt(struct sock *sk, int level, int optname, > > /* Handle options that can be set without locking the socket. */ > switch (optname) { > + case IPV6_FREEBIND: > + if (optlen < sizeof(int)) > + return -EINVAL; > + /* Shared with IP_FREEBIND. */ > + inet_assign_bit(FREEBIND, sk, valbool); > + return 0; > + case IPV6_TRANSPARENT: > + if (valbool && !sockopt_ns_capable(net->user_ns, CAP_NET_RAW) && > + !sockopt_ns_capable(net->user_ns, CAP_NET_ADMIN)) > + return -EPERM; > + if (optlen < sizeof(int)) > + return -EINVAL; > + /* Shared with IP_TRANSPARENT. */ > + inet_assign_bit(TRANSPARENT, sk, valbool); > + return 0; > case IPV6_UNICAST_HOPS: > if (optlen < sizeof(int)) > return -EINVAL; > @@ -666,27 +681,6 @@ int do_ipv6_setsockopt(struct sock *sk, int level, int optname, > retv = 0; > break; > > - case IPV6_TRANSPARENT: > - if (valbool && !sockopt_ns_capable(net->user_ns, CAP_NET_RAW) && > - !sockopt_ns_capable(net->user_ns, CAP_NET_ADMIN)) { > - retv = -EPERM; > - break; > - } > - if (optlen < sizeof(int)) > - goto e_inval; > - /* we don't have a separate transparent bit for IPV6 we use the one in the IPv4 socket */ > - inet_assign_bit(TRANSPARENT, sk, valbool); > - retv = 0; > - break; > - > - case IPV6_FREEBIND: > - if (optlen < sizeof(int)) > - goto e_inval; > - /* we also don't have a separate freebind bit for IPV6 */ > - inet_assign_bit(FREEBIND, sk, valbool); > - retv = 0; > - break; > - > case IPV6_RECVORIGDSTADDR: > if (optlen < sizeof(int)) > goto e_inval; > > base-commit: 348ea4642f56ab3dc93621c8e3ab0ccd0e5f1782 > -- > 2.43.0 > Reviewed-by: Hangbin Liu