From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) (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 0A3DE1BD9EC for ; Tue, 12 Nov 2024 00:26:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731371173; cv=none; b=JYlqgJIu4pSACiMpM6mSrYx4Z+s86K11+i4W9h5d00Oz5IzySjvpvEl3tFllxtHb+mNVC/MOpgvwOQMKyaoIP6kOdD6GSUrDjmRakDUrL3oY5zYdehPAgpfV+VLdoUfflQVBrujTaAYUPLg8sEIbWN+DvKerj/+TizqJfNq8LS8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731371173; c=relaxed/simple; bh=Kcit5CA4vTs4RMwxjpt8VPjivGf4nauNqiLQ3xNz1dg=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=bOch0wouoRuGHDnIWo9Euhzc3GSJkCTi7yyA3RnPHykeDMTVBy1L5P2Bt4PIBwq00ncEosbdOySxqaiq9A/5KU/S/GpXUzE9/BdaZnq0LmtrZ1lVuuEbA8YTUMuERVn+T4FUIMD8OZlxK2q/gW+3eJyRs+n+2aGiovJMvx1jdKM= 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=kO+Lnfri; arc=none smtp.client-ip=95.215.58.176 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="kO+Lnfri" Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1731371167; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KPcxxtMej3Q9CrLa0p7MBeuTQqkwQgbrelNqYAfqzhE=; b=kO+LnfriD7MOhewKFJpty3IQAqd0dlGZ+c7DOynj4za0S9K9ZS9SETPO/8NRvjGAerVzvJ Q0jIfU5gyX6JGdptORBpAnVmzpRrvLyZVY5VNVdw0fYfpRl60xvFxEZoL/DFU8lHQVNHq8 fOFrEnQrB+XfHDY836G2Zx//9t3WznE= Date: Mon, 11 Nov 2024 16:25:52 -0800 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Subject: Re: [PATCH bpf-next/net 1/5] bpf: Register mptcp common kfunc set To: "Matthieu Baerts (NGI0)" , Geliang Tang Cc: mptcp@lists.linux.dev, Mat Martineau , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Mykola Lysenko , Shuah Khan , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org References: <20241108-bpf-next-net-mptcp-bpf_iter-subflows-v1-0-cf16953035c1@kernel.org> <20241108-bpf-next-net-mptcp-bpf_iter-subflows-v1-1-cf16953035c1@kernel.org> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Martin KaFai Lau In-Reply-To: <20241108-bpf-next-net-mptcp-bpf_iter-subflows-v1-1-cf16953035c1@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT On 11/8/24 7:52 AM, Matthieu Baerts (NGI0) wrote: > From: Geliang Tang > > MPTCP helper mptcp_sk() is used to convert struct sock to mptcp_sock. > Helpers mptcp_subflow_ctx() and mptcp_subflow_tcp_sock() are used to > convert between struct mptcp_subflow_context and sock. They all will > be used in MPTCP BPF programs too. > > This patch defines corresponding wrappers of them, and put the > wrappers into mptcp common kfunc set and register the set with the > flag BPF_PROG_TYPE_UNSPEC to let them accessible to all types of BPF > programs. > > Signed-off-by: Geliang Tang > Reviewed-by: Mat Martineau > Reviewed-by: Matthieu Baerts (NGI0) > Signed-off-by: Matthieu Baerts (NGI0) > --- > net/mptcp/bpf.c | 40 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 39 insertions(+), 1 deletion(-) > > diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c > index 8a16672b94e2384f5263e1432296cbca1236bb30..6f96a5927fd371f8ea92cbf96c875edef9272b98 100644 > --- a/net/mptcp/bpf.c > +++ b/net/mptcp/bpf.c > @@ -29,8 +29,46 @@ static const struct btf_kfunc_id_set bpf_mptcp_fmodret_set = { > .set = &bpf_mptcp_fmodret_ids, > }; > > +__bpf_kfunc_start_defs(); > + > +__bpf_kfunc static struct mptcp_sock *bpf_mptcp_sk(struct sock *sk) > +{ > + return mptcp_sk(sk); > +} > + > +__bpf_kfunc static struct mptcp_subflow_context * > +bpf_mptcp_subflow_ctx(const struct sock *sk) > +{ > + return mptcp_subflow_ctx(sk); This returns "struct mptcp_subflow_context *" without checking the sk is a mptcp subflow or not... > +} > + > +__bpf_kfunc static struct sock * > +bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) > +{ > + return mptcp_subflow_tcp_sock(subflow); ...and then the "struct mptcp_subflow_context *" can be used by this kfunc here. Is it really safe? > +} > + > +__bpf_kfunc_end_defs(); > + > +BTF_KFUNCS_START(bpf_mptcp_common_kfunc_ids) > +BTF_ID_FLAGS(func, bpf_mptcp_sk) > +BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx) > +BTF_ID_FLAGS(func, bpf_mptcp_subflow_tcp_sock) All of them has no KF_TRUSTED_ARGS or KF_RCU, so the returned ptr is supposed to be read-only? Why are they needed and why bpf_rdonly_cast (aka the bpf_core_cast in libbpf) cannot be used? pw-bot: cr > +BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids) > + > +static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set = { > + .owner = THIS_MODULE, > + .set = &bpf_mptcp_common_kfunc_ids, > +}; > + > static int __init bpf_mptcp_kfunc_init(void) > { > - return register_btf_fmodret_id_set(&bpf_mptcp_fmodret_set); > + int ret; > + > + ret = register_btf_fmodret_id_set(&bpf_mptcp_fmodret_set); > + ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_UNSPEC, > + &bpf_mptcp_common_kfunc_set); > + > + return ret; > } > late_initcall(bpf_mptcp_kfunc_init); >