Re: [PATCH v2 bpf-next 2/2] bpf: return long from bpf_map_ops funcs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 22, 2023 at 12:47:54PM -0700, JP Kobryn wrote:
> This patch changes the return types of bpf_map_ops functions to long, where
> previously int was returned. Using long allows for bpf programs to maintain
> the sign bit in the absence of sign extension during situations where
> inlined bpf helper funcs make calls to the bpf_map_ops funcs and a negative
> error is returned.
> 
> The definitions of the helper funcs are generated from comments in the bpf
> uapi header at `include/uapi/linux/bpf.h`. The return type of these
> helpers was previously changed from int to long in commit bdb7b79b4ce8. For
> any case where one of the map helpers call the bpf_map_ops funcs that are
> still returning 32-bit int, a compiler might not include sign extension
> instructions to properly convert the 32-bit negative value a 64-bit
> negative value.
> 
> For example:
> bpf assembly excerpt of an inlined helper calling a kernel function and
> checking for a specific error:
> 
> ; err = bpf_map_update_elem(&mymap, &key, &val, BPF_NOEXIST);
>   ...
>   46:	call   0xffffffffe103291c	; htab_map_update_elem
> ; if (err && err != -EEXIST) {
>   4b:	cmp    $0xffffffffffffffef,%rax ; cmp -EEXIST,%rax
> 
> kernel function assembly excerpt of return value from
> `htab_map_update_elem` returning 32-bit int:
> 
> movl $0xffffffef, %r9d
> ...
> movl %r9d, %eax
> 
> ...results in the comparison:
> cmp $0xffffffffffffffef, $0x00000000ffffffef
> 
> Fixes: bdb7b79b4ce8 (bpf: Switch most helper return values from 32-bit int
> to 64-bit long)

please don't break Fixes tag into multiple lines.
Also keep "".
I fixed it this time while applying.



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux