Hi,

On 16 January 2018 at 14:30, Pekka Paalanen <ppaala...@gmail.com> wrote:
> On Wed, 20 Dec 2017 12:26:23 +0000
> Daniel Stone <dani...@collabora.com> wrote:
>> @@ -3355,6 +3398,19 @@ drm_output_init_egl(struct drm_output *output, struct 
>> drm_backend *b)
>>  static void
>>  drm_output_fini_egl(struct drm_output *output)
>>  {
>> +     struct drm_backend *b = to_drm_backend(output->base.compositor);
>> +
>> +     /* Destroying the GBM surface will destroy all our GBM buffers,
>> +      * regardless of refcount. Ensure we destroy them here. */
>
> I suppose that happens inside eglDestroySurface().

Inside gbm_surface_destroy(). This destroys every BO created for the surface.

>>  static void
>>  drm_output_fini_pixman(struct drm_output *output)
>>  {
>> +     struct drm_backend *b = to_drm_backend(output->base.compositor);
>>       unsigned int i;
>>
>> +     /* Destroying the Pixman surface will destroy all our buffers,
>> +      * regardless of refcount. Ensure we destroy them here. */
>
> I think this is only half-true. The pixman_image_t does get destroyed,
> but drm_fb is still refcounted and recount honoured it seems. Only
> drm_output_render_pixman() uses the image, and I assume that won't
> called anymore. drm_fb is the one that maintains the backing storage in
> this case.
>
> Therefore this workaround here is not necessary for avoiding
> use-after-free, but maybe we want this to ensure the drm_fb really does
> get destroyed anyway?
>
> At most, the comment here could be adjusted.

Yes, the wording is too imprecise, and I'm thinking of the
pixman_image_t, which doesn't have a ref on the drm_fb. I'll try to
think of some better wording.

Cheers,
Daniel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to