All of lore.kernel.org
 help / color / mirror / Atom feed
From: houtao <houtao@huaweicloud.com>
To: Yonghong Song <yhs@fb.com>, bpf@vger.kernel.org
Cc: Andrii Nakryiko <andrii@kernel.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
	KP Singh <kpsingh@kernel.org>,
	"David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	Lorenz Bauer <lmb@cloudflare.com>,
	houtao1@huawei.com
Subject: Re: [PATCH bpf 1/9] bpf: Acquire map uref in .init_seq_private for array map iterator
Date: Tue, 9 Aug 2022 09:07:03 +0800	[thread overview]
Message-ID: <b7edc598-9d0c-3eb6-4ff2-ecf14bbc3226@huaweicloud.com> (raw)
In-Reply-To: <7e82bc88-d42c-98de-79a7-eda5d48c2b3c@fb.com>

Hi,

On 8/8/2022 10:53 PM, Yonghong Song wrote:
>
>
> On 8/6/22 12:40 AM, Hou Tao wrote:
>> From: Hou Tao <houtao1@huawei.com>
>>
>> During bpf(BPF_LINK_CREATE) for BPF_TRACE_ITER, bpf_iter_attach_map()
>> has already acquired a map uref, but the uref may be released by
>> bpf_link_release() during th reading of map iterator.
>
> some wording issue:
> bpf_iter_attach_map() acquires a map uref, and the uref may be released
> before or in the middle of iterating map elements. For example, the uref
> could be released in bpf_iter_detach_map() as part of
> bpf_link_release(), or could be released in bpf_map_put_with_uref()
> as part of bpf_map_release().
Thanks, it is much better than the original commit message. Will update in v2.

Regards
Tao
>
>>
>> Alternative fix is acquiring an extra bpf_link reference just like
>> a pinned map iterator does, but it introduces unnecessary dependency
>> on bpf_link instead of bpf_map.
>>
>> So choose another fix: acquiring an extra map uref in .init_seq_private
>> for array map iterator.
>>
>> Fixes: d3cc2ab546ad ("bpf: Implement bpf iterator for array maps")
>> Signed-off-by: Hou Tao <houtao1@huawei.com>
>
> Acked-by: Yonghong Song <yhs@fb.com>
>
>> ---
>>   kernel/bpf/arraymap.c | 7 +++++++
>>   1 file changed, 7 insertions(+)
>>
>> diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
>> index d3e734bf8056..bf6898bb7cb8 100644
>> --- a/kernel/bpf/arraymap.c
>> +++ b/kernel/bpf/arraymap.c
>> @@ -649,6 +649,12 @@ static int bpf_iter_init_array_map(void *priv_data,
>>           seq_info->percpu_value_buf = value_buf;
>>       }
>>   +    /*
>> +     * During bpf(BPF_LINK_CREATE), bpf_iter_attach_map() has already
>> +     * acquired a map uref, but the uref may be released by
>> +     * bpf_link_release(), so acquire an extra map uref for iterator.
>> +     */
>> +    bpf_map_inc_with_uref(map);
>>       seq_info->map = map;
>>       return 0;
>>   }
>> @@ -657,6 +663,7 @@ static void bpf_iter_fini_array_map(void *priv_data)
>>   {
>>       struct bpf_iter_seq_array_map_info *seq_info = priv_data;
>>   +    bpf_map_put_with_uref(seq_info->map);
>>       kfree(seq_info->percpu_value_buf);
>>   }
>>   


  reply	other threads:[~2022-08-09  1:07 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-06  7:40 [PATCH bpf 0/9] fixes for bpf map iterator Hou Tao
2022-08-06  7:40 ` [PATCH bpf 1/9] bpf: Acquire map uref in .init_seq_private for array " Hou Tao
2022-08-08 14:53   ` Yonghong Song
2022-08-09  1:07     ` houtao [this message]
2022-08-06  7:40 ` [PATCH bpf 2/9] bpf: Acquire map uref in .init_seq_private for hash " Hou Tao
2022-08-08 14:54   ` Yonghong Song
2022-08-06  7:40 ` [PATCH bpf 3/9] bpf: Acquire map uref in .init_seq_private for sock local storage " Hou Tao
2022-08-08 14:54   ` Yonghong Song
2022-08-06  7:40 ` [PATCH bpf 4/9] bpf: Acquire map uref in .init_seq_private for sock{map,hash} iterator Hou Tao
2022-08-08 14:55   ` Yonghong Song
2022-08-06  7:40 ` [PATCH bpf 5/9] bpf: Check the validity of max_rdwr_access for sk storage map iterator Hou Tao
2022-08-08 14:56   ` Yonghong Song
2022-08-09 18:46   ` Martin KaFai Lau
2022-08-10  1:34     ` Hou Tao
2022-08-06  7:40 ` [PATCH bpf 6/9] bpf: Only allow sleepable program for resched-able iterator Hou Tao
2022-08-08 15:07   ` Yonghong Song
2022-08-06  7:40 ` [PATCH bpf 7/9] selftests/bpf: Add tests for reading a dangling map iter fd Hou Tao
2022-08-08 15:15   ` Yonghong Song
2022-08-09  1:23     ` houtao
2022-08-09 19:13       ` Martin KaFai Lau
2022-08-10  0:18         ` Yonghong Song
2022-08-06  7:40 ` [PATCH bpf 8/9] selftests/bpf: Add write tests for sk storage map iterator Hou Tao
2022-08-08 15:27   ` Yonghong Song
2022-08-09  1:26     ` houtao
2022-08-06  7:40 ` [PATCH bpf 9/9] selftests/bpf: Ensure sleepable program is rejected by hash map iter Hou Tao
2022-08-08 15:30   ` Yonghong Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b7edc598-9d0c-3eb6-4ff2-ecf14bbc3226@huaweicloud.com \
    --to=houtao@huaweicloud.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=haoluo@google.com \
    --cc=houtao1@huawei.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kafai@fb.com \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=lmb@cloudflare.com \
    --cc=sdf@google.com \
    --cc=songliubraving@fb.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.