On Wed, Sep 20, 2023 at 03:02:27PM +0200, Matthieu Herrb wrote:

> On Wed, Sep 20, 2023 at 08:08:23AM +0200, Otto Moerbeek wrote:
> > 
> > The other, a write after free that crashed the X server when running
> > picard was diagnosed by me.  This one was a bit nasty, as it required
> > instrumenting malloc to print some extra info to find the root cause. 
> > 
> > The bug is that the call in
> > https://github.com/openbsd/xenocara/blob/master/xserver/Xext/xvdisp.c#L1002
> > overwrites the first 4 bytes of the chunk next to the one allocated on
> > line 995.
> > 
> > A workaround is to allocate 4 bytes extra, matthieu@ will be looking
> > for a proper fix, as it requires knowledge of the X internals.
> > 
> 
> Hi,
> 
> Thanks again for finding it. Can you try this patch ?
> 
> ===
> Fix overflow in glamor_xv_query_image_attributes for NV12 image format
> 
> This is a format with num_planes == 2, we have only 2 elements in
> offsets[] and pitches[]
> 
> Bug found by Otto Moerbeek on OpenBSD using his strict malloc checking.
> ---
>  glamor/glamor_xv.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
> index a3d6b3bc3..e0e8e0ba9 100644
> --- a/glamor/glamor_xv.c
> +++ b/glamor/glamor_xv.c
> @@ -291,10 +291,10 @@ glamor_xv_query_image_attributes(int id,
>              pitches[0] = size;
>          size *= *h;
>          if (offsets)
> -            offsets[1] = offsets[2] = size;
> +            offsets[1] = size;
>          tmp = ALIGN(*w, 4);
>          if (pitches)
> -            pitches[1] = pitches[2] = tmp;
> +            pitches[1] = tmp;
>          tmp *= (*h >> 1);
>          size += tmp;
>          break;
> --- 
> 2.42.0

Yes, that works for me,

        -Otto

Reply via email to