Re: [RFC] Add BPF_SYNCHRONIZE bpf(2) command

From: Alexei Starovoitov
Date: Sun Jul 29 2018 - 11:57:35 EST


On Fri, Jul 27, 2018 at 10:17 PM, Daniel Colascione <dancol@xxxxxxxxxx> wrote:
> On Sat, Jul 14, 2018 at 11:18 AM, Joel Fernandes <joel@xxxxxxxxxxxxxxxxx>
> wrote:
>>
>> By the way just curious I was briefly going through kernel/bpf/arraymap.c.
>> How are you protecting against load-store tearing of values of array map
>> updates/lookups?
>>
>> For example, if userspace reads an array map at a particular index, while
>> another CPU is updating it, then userspace can read partial values /
>> half-updated values right? Since rcu_read_lock is in use, I was hoping to
>> find something like rcu_assign_pointer there to protect readers against
>> concurrent updates. Thanks for any clarification.
>
>
> I'm also curious about the answer to this question.

i'm not sure I understand the question.
bpf_map_type_array is a C-like array.
There is no locking of elements.
If single program executing on two cpus
and accesses the same value it will collide.
Same goes for user space vs prog parallel access.
bpf long_memcpy is an attempt to provide minimal
level of automicity when values are aligned and
size==long.