[Mesa-dev] [PATCH] r600g: Drop references to destroyed blend state

Marek Olšák maraeo at gmail.com
Tue Oct 21 03:05:52 PDT 2014


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Tue, Oct 21, 2014 at 11:52 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Fixes use-after-free when the currently bound blend state is destroyed.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85267
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/drivers/r600/r600_state_common.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
> index 68365f9..879ec35 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -158,8 +158,10 @@ static void r600_bind_blend_state(struct pipe_context *ctx, void *state)
>         struct r600_context *rctx = (struct r600_context *)ctx;
>         struct r600_blend_state *blend = (struct r600_blend_state *)state;
>
> -       if (blend == NULL)
> +       if (blend == NULL) {
> +               r600_set_cso_state_with_cb(&rctx->blend_state, NULL, NULL);
>                 return;
> +       }
>
>         r600_bind_blend_state_internal(rctx, blend, rctx->force_blend_disable);
>  }
> @@ -447,8 +449,13 @@ static void r600_delete_sampler_state(struct pipe_context *ctx, void *state)
>
>  static void r600_delete_blend_state(struct pipe_context *ctx, void *state)
>  {
> +       struct r600_context *rctx = (struct r600_context *)ctx;
>         struct r600_blend_state *blend = (struct r600_blend_state*)state;
>
> +       if (rctx->blend_state.cso == state) {
> +               ctx->bind_blend_state(ctx, NULL);
> +       }
> +
>         r600_release_command_buffer(&blend->buffer);
>         r600_release_command_buffer(&blend->buffer_no_blend);
>         FREE(blend);
> --
> 2.1.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list