[Spice-devel] [PATCH v2] red-parse-qxl: Check consistency of QXL_DRAW_COPY operations
Frediano Ziglio
fziglio at redhat.com
Wed Jun 1 09:57:14 UTC 2016
> On Fri, 27 May 2016, Frediano Ziglio wrote:
>
> > >
> > > The source area should not extend outside the source bitmap, or have
> > > swapped coordinates.
> > >
> > > Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
> > > ---
> > > server/red-parse-qxl.c | 12 ++++++++++++
> > > 1 file changed, 12 insertions(+)
> > >
> >
> > I checked and if this function return error the resource is correctly
> > released.
>
> Yes. So the original patch was correct.
>
>
> > > + (red->src_area.left < 0 ||
> > > + red->src_area.left > red->src_area.right ||
> > > + red->src_area.right > red->src_bitmap->u.bitmap.x ||
> > > + red->src_area.top < 0 || red->src_area.top >
> > > red->src_area.bottom
> > > ||
> > > + red->src_area.bottom > red->src_bitmap->u.bitmap.y)) {
> > > + red_put_image(red->src_bitmap);
> >
> > Mm... this make me think you didn't test the code.. this cause
> > a double free in the current code
>
> I tested the original patch but I failed to retest the error condition
> after adding the red_put_image() call. I have now done that, found the
> double free, and so I recommend going back to the original patch.
>
Can I suggest
@@ -682,6 +682,20 @@ static int red_get_copy_ptr(RedMemSlotInfo *slots, int group_id,
return 1;
}
red_get_rect_ptr(&red->src_area, &qxl->src_area);
+ /* The source area should not extend outside the source bitmap or have
+ * swapped coordinates.
+ */
+ if (red->src_area.left < 0 ||
+ red->src_area.left > red->src_area.right ||
+ red->src_area.top < 0 ||
+ red->src_area.top > red->src_area.bottom) {
+ return 1;
+ }
+ if (red->src_bitmap->descriptor.type == SPICE_IMAGE_TYPE_BITMAP &&
+ (red->src_area.right > red->src_bitmap->u.bitmap.x ||
+ red->src_area.bottom > red->src_bitmap->u.bitmap.y)) {
+ return 1;
+ }
red->rop_descriptor = qxl->rop_descriptor;
red->scale_mode = qxl->scale_mode;
red_get_qmask_ptr(slots, group_id, &red->mask, &qxl->mask, flags);
?
Frediano
More information about the Spice-devel
mailing list