Messages in this thread | | | Date | Sat, 23 Sep 2023 10:26:09 -0600 | Subject | Re: [PATCH] media: v4l2-event: Annotate struct v4l2_subscribed_event with __counted_by | From | "Gustavo A. R. Silva" <> |
| |
On 9/22/23 11:49, Kees Cook wrote: > Prepare for the coming implementation by GCC and Clang of the __counted_by > attribute. Flexible array members annotated with __counted_by can have > their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS > (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family > functions). > > As found with Coccinelle[1], add __counted_by for struct v4l2_subscribed_event. > Additionally, since the element count member must be set before accessing > the annotated flexible array member, move its initialization earlier. > > [1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci > > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl> > Cc: lijian <lijian@yulong.com> > Cc: linux-media@vger.kernel.org > Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks -- Gustavo
> --- > drivers/media/v4l2-core/v4l2-event.c | 2 +- > include/media/v4l2-event.h | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c > index c5ce9f11ad7b..3898ff7edddb 100644 > --- a/drivers/media/v4l2-core/v4l2-event.c > +++ b/drivers/media/v4l2-core/v4l2-event.c > @@ -238,6 +238,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh, > sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL); > if (!sev) > return -ENOMEM; > + sev->elems = elems; > for (i = 0; i < elems; i++) > sev->events[i].sev = sev; > sev->type = sub->type; > @@ -245,7 +246,6 @@ int v4l2_event_subscribe(struct v4l2_fh *fh, > sev->flags = sub->flags; > sev->fh = fh; > sev->ops = ops; > - sev->elems = elems; > > mutex_lock(&fh->subscribe_lock); > > diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h > index 4ffa914ade3a..3a0e2588361c 100644 > --- a/include/media/v4l2-event.h > +++ b/include/media/v4l2-event.h > @@ -78,7 +78,7 @@ struct v4l2_subscribed_event { > unsigned int elems; > unsigned int first; > unsigned int in_use; > - struct v4l2_kevent events[]; > + struct v4l2_kevent events[] __counted_by(elems); > }; > > /**
| |