On Tue, Jun 30, 2020 at 7:52 AM Daniel Borkmann <dan...@iogearbox.net> 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 <andr...@fb.com>
>
> 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

Reply via email to