Re: [PATCH v2 bpf] bpf: enforce BPF ringbuf size to be the power of 2

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

 



On Tue, Jun 30, 2020 at 7:52 AM Daniel Borkmann <daniel@xxxxxxxxxxxxx> wrote:
>
> On 6/30/20 8:15 AM, Andrii Nakryiko wrote:
> > BPF ringbuf assumes the size to be a multiple of page size and the power of
> > 2 value. The latter is important to avoid division while calculating position
> > inside the ring buffer and using (N-1) mask instead. This patch fixes omission
> > to enforce power-of-2 size rule.
> >
> > Fixes: 457f44363a88 ("bpf: Implement BPF ring buffer and verifier support for it")
> > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx>
>
> Lgtm, applied, thanks!
>

Thanks, Daniel!

> [...]
> > @@ -166,9 +157,16 @@ static struct bpf_map *ringbuf_map_alloc(union bpf_attr *attr)
> >               return ERR_PTR(-EINVAL);
> >
> >       if (attr->key_size || attr->value_size ||
> > -         attr->max_entries == 0 || !PAGE_ALIGNED(attr->max_entries))
> > +         !is_power_of_2(attr->max_entries) ||
> > +         !PAGE_ALIGNED(attr->max_entries))
>
> Technically !IS_ALIGNED(attr->max_entries, PAGE_SIZE) might have been a bit cleaner
> since PAGE_ALIGNED() is only intended for pointers, though, not wrong here given
> max_entries is u32.

I've found a bunch of uses on non-pointers, e.g., `if
(!PAGE_ALIGNED(fs_info->nodesize)) {` in BTRFS code, so assumed it's
intended to be used more generically. But let me know if you want me
to do IS_ALIGNED change.

>
> Thanks,
> Daniel



[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