[Mesa-dev] [PATCH] st/mesa: add null pointer checking in query object functions

Roland Scheidegger sroland at vmware.com
Wed Mar 26 08:53:45 PDT 2014


Am 25.03.2014 00:30, schrieb Brian Paul:
> Don't pass null query object pointers into gallium functions.
> This avoids segfaulting in the VMware driver (and others?) if the
> pipe_context::create_query() call fails and returns NULL.
> 
> Cc: "10.0" "10.1" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/state_tracker/st_cb_queryobj.c |   18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
> index 5186a51..78a7370 100644
> --- a/src/mesa/state_tracker/st_cb_queryobj.c
> +++ b/src/mesa/state_tracker/st_cb_queryobj.c
> @@ -141,7 +141,13 @@ st_BeginQuery(struct gl_context *ctx, struct gl_query_object *q)
>           stq->pq = pipe->create_query(pipe, type);
>           stq->type = type;
>        }
> -      pipe->begin_query(pipe, stq->pq);
> +      if (stq->pq) {
> +         pipe->begin_query(pipe, stq->pq);
> +      }
> +      else {
> +         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBeginQuery");
> +         return;
> +      }
>     }
>     assert(stq->type == type);
>  }
> @@ -162,7 +168,8 @@ st_EndQuery(struct gl_context *ctx, struct gl_query_object *q)
>        stq->type = PIPE_QUERY_TIMESTAMP;
>     }
>  
> -   pipe->end_query(pipe, stq->pq);
> +   if (stq->pq)
> +      pipe->end_query(pipe, stq->pq);
>  }
>  
>  
> @@ -171,6 +178,13 @@ get_query_result(struct pipe_context *pipe,
>                   struct st_query_object *stq,
>                   boolean wait)
>  {
> +   if (!stq->pq) {
> +      /* Only needed in case we failed to allocate the gallium query earlier.
> +       * Return TRUE so we don't spin on this forever.
> +       */
> +      return TRUE;
> +   }
> +
>     if (!pipe->get_query_result(pipe,
>                                 stq->pq,
>                                 wait,
> 

Reviewed-by: Roland Scheidegger <sroland at vmware.com>


More information about the mesa-dev mailing list