From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) (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 B66673B9943 for ; Wed, 29 Jul 2026 20:30:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785357017; cv=none; b=fIkWS4y5uA+bAqr4AgGqdYzHNj0aM8yisrx6as7dhVMsnb2sRIT2je/bNl1wZ5Wo01JPCV5/Gq4gXxrkvQozD0Qp3uW8Exjsm2nWb1FkgXuYdTHKu3idJxCvoB+R9F//fptImQmtjyEMfOgqrDu8uQ5KO8nvofWk9uTDyRH/bXc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785357017; c=relaxed/simple; bh=TIzvQ5yYUuwHOZxSzc2URBeJxr0Wj/Wxqs1MuDtXDC8=; h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To: References:In-Reply-To; b=LI6S4OtXHAwFXErrzZu+UOnJZfZSM+ilNzZ3LYndUjO/Jl2DUohq70dBL45NwotmmKvmSuk0bJoO80E6awOxJb+MXnPfxVKetzW2VAXRYGt3B2ZAEiksnzk2U1NuKG/imUDK9w5jyx/TyPqXKF4diMDBzFKEWZ1oywy7qAMLHoE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=etsalapatis.com; spf=pass smtp.mailfrom=etsalapatis.com; dkim=pass (2048-bit key) header.d=etsalapatis-com.20251104.gappssmtp.com header.i=@etsalapatis-com.20251104.gappssmtp.com header.b=snJRu/I1; arc=none smtp.client-ip=209.85.215.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=etsalapatis.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=etsalapatis.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=etsalapatis-com.20251104.gappssmtp.com header.i=@etsalapatis-com.20251104.gappssmtp.com header.b="snJRu/I1" Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-c99eaa1f020so1161431a12.2 for ; Wed, 29 Jul 2026 13:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etsalapatis-com.20251104.gappssmtp.com; s=20251104; t=1785357013; x=1785961813; darn=vger.kernel.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :content-type:content-transfer-encoding:mime-version:from:to:cc :subject:date:message-id:reply-to:content-type; bh=ShSGDIdvDY2A/E8agT8O3gUlL/J2ljN0bWMP2ClUyTQ=; b=snJRu/I1rxhtPPlplPfA/tc7BkejtbtViAvkD9DjNS3xDMJZBQQsZTurV3pg/2N4uq K91Fx8fV7w9VTZeniNBqT9hxURWsEOZlNmrWu2fzwd4XGRc2hhtO+0FWKTGyyWqZbVnq UJQaX68HBSZ+oobDIoP36ujpXLD6w87OmHfWNMxXiGPntEdVlMtFnbvB4dZ6NrAUfocB Iud3yL+1IOAl0CORgN8OwApT6ivghbj3aAwr4dxAaE6pxSmmtZTC+j1EHnR+vDsmWdLy mQzlUP8Ms7tW7LBb4CUMnUzgbi5H1JbwsFVwaiAuC/tT8omQ+5pmd7prBIlfyXoJTiVG iABg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785357013; x=1785961813; h=in-reply-to:references:to:from:subject:cc:message-id:date :content-type:content-transfer-encoding:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ShSGDIdvDY2A/E8agT8O3gUlL/J2ljN0bWMP2ClUyTQ=; b=OMp8DqtULqTCZCKRHVNsjMwXV5fz1AsLm2x23T01P3Idx77gXV03Wak2npvrSAiYRU RPzoKFAOsA+a/MRrAh1X7RHF0O0/S9N3ERNF1O1qpnBxbrHoaIcp85uw2ZOB130Ga1e4 KV2VrIguzmGrAsvDFzUrqQpd1nH8RoawiVP5GGQqggBNm5QpxDsqlOLcz+hTZGCQaOrF 1GEcl5XL6KwH8MR1Jpg0W54Xe0P9ZAeLvNREyKz03KWyfoIf1SwQknMin7e2fGmdi1qv XdjuKxifnx8fQ/r+MfOZBvEp9yk4gLSnRowtBBaKi2cZi1XMAXHcIxVu94rYHcHYSMK5 jICQ== X-Forwarded-Encrypted: i=1; AHgh+RqEElCM//nGAZZ8acHUdreLrqWV76FRNHKahSyijcWb+bZZjf04ubE9dI0JtwObHW9yVqjYMiRAuiweZ/0=@vger.kernel.org X-Gm-Message-State: AOJu0YzEi3lO3Zf0gQzgQJjOWxF+gDwyyKkp09NeTXt7bKuuveRtF22l p/M+ie/2FDBZnQZ1rfd6lvKbuBJ4NjAlF9QiVSGrJVnFnBRTvfjKWWWFYSDKEmMxCLE= X-Gm-Gg: AR+sD12ojt9SaWT87ZzL97sK9DOufpR4QTzIIqAyHlOJ16VHCFRANbgTtBXBTfqVJLx ceY2NPiCp501vR6S1SgtJ+2HVy3C6cPwRK0EAJQhD1lBUVv0Y6rrBE2aOz0Xfji0/IRtlyB7uqk zw39xrJPR86pnHbc3ytfjn9INRFSuFJMloHS0+8fpuDTdpCaTEpMFgKUgAeKQRxlqlSf90mpHkn mJMJ4VKX1BG1KAeVexceuwtrEBDYxyPXNxOglARy3giYxxFJXdLzjyyzTJeXnMSu6ef9xuAkNWD cem298n0L3Cv6arZr7tIln0/v4eWw3i4CXzLYJgmxDbzs/13cG1eLPpZeACARvGrUf0Gf8k1KJh nNsCazE4NSh1EUASAOJWiAa2bD784VLS3IljGWpH3iZuew1AHiZ1XM9ZBw67HV324r8j/yrWRDi iW9HEIAuFIoriPe3e0e/HSZtBx5q3XGLYSdTx/Ny7HN/C4YECB9CKTA8A= X-Received: by 2002:a05:6a21:112:b0:3c3:7bb9:c93 with SMTP id adf61e73a8af0-3c8ba61523bmr9792974637.53.1785357013468; Wed, 29 Jul 2026 13:30:13 -0700 (PDT) Received: from localhost ([2620:10d:c090:600::1:d447]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13e72643a12sm19441406c88.5.2026.07.29.13.30.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Jul 2026 13:30:13 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Wed, 29 Jul 2026 16:30:10 -0400 Message-Id: Cc: , , Subject: Re: [PATCH bpf 2/3] bpf: Extract shared reqsk-to-listener upgrade From: "Emil Tsalapatis" To: "Michal Luczaj" , "Eric Dumazet" , "Kuniyuki Iwashima" , "Paolo Abeni" , "Willem de Bruijn" , "John Fastabend" , "Jakub Sitnicki" , "Jiayuan Chen" , "David S. Miller" , "Jakub Kicinski" , "Simon Horman" , "Daniel Borkmann" , "Stanislav Fomichev" , "Martin KaFai Lau" , "Alexei Starovoitov" , "Andrii Nakryiko" , "Eduard Zingerman" , "Kumar Kartikeya Dwivedi" , "Song Liu" , "Yonghong Song" , "Jiri Olsa" , "Emil Tsalapatis" , "Joe Stringer" X-Mailer: aerc 0.21.0-0-g5549850facc2 References: <20260723-sockmap-lookup-tcp-leak-v1-0-1bbdc58ce514@rbox.co> <20260723-sockmap-lookup-tcp-leak-v1-2-1bbdc58ce514@rbox.co> In-Reply-To: <20260723-sockmap-lookup-tcp-leak-v1-2-1bbdc58ce514@rbox.co> On Thu Jul 23, 2026 at 7:33 AM EDT, Michal Luczaj wrote: > __bpf_sk_lookup() and bpf_sk_lookup() duplicate the same sk_to_full_sk() > reqsk-to-listener upgrade. Extract it into a helper. > > Leave the currently unreachable WARN_ONCE as a defensive assert. > > No functional change. Reviewed-by: Emil Tsalapatis > > Signed-off-by: Michal Luczaj > --- > net/core/filter.c | 57 ++++++++++++++++++++++++-------------------------= ------ > 1 file changed, 25 insertions(+), 32 deletions(-) > > diff --git a/net/core/filter.c b/net/core/filter.c > index b446aa8be5c3..403aba3ce891 100644 > --- a/net/core/filter.c > +++ b/net/core/filter.c > @@ -7074,6 +7074,27 @@ __bpf_skc_lookup(struct sk_buff *skb, struct bpf_s= ock_tuple *tuple, u32 len, > return sk; > } > =20 > +static struct sock * > +bpf_sk_lookup_full_sk(struct sock *sk) > +{ > + struct sock *sk2 =3D sk_to_full_sk(sk); > + > + /* sk_to_full_sk() may return sk->rsk_listener, make sure the original > + * sk sock refcnt is decremented to prevent a request_sock leak. > + */ > + if (sk2 !=3D sk) { > + sock_gen_put(sk); > + /* Ensure there is no need to bump sk2 refcnt. */ > + if (unlikely(sk2 && !sock_flag(sk2, SOCK_RCU_FREE))) { > + WARN_ONCE(1, "Found non-RCU, unreferenced socket!"); > + return NULL; > + } > + sk =3D sk2; > + } > + > + return sk; > +} > + > static struct sock * > __bpf_sk_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 l= en, > struct net *caller_net, u32 ifindex, u8 proto, u64 netns_id, > @@ -7083,22 +7104,8 @@ __bpf_sk_lookup(struct sk_buff *skb, struct bpf_so= ck_tuple *tuple, u32 len, > ifindex, proto, netns_id, flags, > sdif); > =20 > - if (sk) { > - struct sock *sk2 =3D sk_to_full_sk(sk); > - > - /* sk_to_full_sk() may return (sk)->rsk_listener, so make sure the ori= ginal sk > - * sock refcnt is decremented to prevent a request_sock leak. > - */ > - if (sk2 !=3D sk) { > - sock_gen_put(sk); > - /* Ensure there is no need to bump sk2 refcnt */ > - if (unlikely(sk2 && !sock_flag(sk2, SOCK_RCU_FREE))) { > - WARN_ONCE(1, "Found non-RCU, unreferenced socket!"); > - return NULL; > - } > - sk =3D sk2; > - } > - } > + if (sk) > + sk =3D bpf_sk_lookup_full_sk(sk); > =20 > return sk; > } > @@ -7129,22 +7136,8 @@ bpf_sk_lookup(struct sk_buff *skb, struct bpf_sock= _tuple *tuple, u32 len, > struct sock *sk =3D bpf_skc_lookup(skb, tuple, len, proto, netns_id, > flags); > =20 > - if (sk) { > - struct sock *sk2 =3D sk_to_full_sk(sk); > - > - /* sk_to_full_sk() may return (sk)->rsk_listener, so make sure the ori= ginal sk > - * sock refcnt is decremented to prevent a request_sock leak. > - */ > - if (sk2 !=3D sk) { > - sock_gen_put(sk); > - /* Ensure there is no need to bump sk2 refcnt */ > - if (unlikely(sk2 && !sock_flag(sk2, SOCK_RCU_FREE))) { > - WARN_ONCE(1, "Found non-RCU, unreferenced socket!"); > - return NULL; > - } > - sk =3D sk2; > - } > - } > + if (sk) > + sk =3D bpf_sk_lookup_full_sk(sk); > =20 > return sk; > }