[Mesa-dev] [PATCH] mesa: don't memcmp() off the end of a cache key.

Ian Romanick idr at freedesktop.org
Mon Apr 1 11:21:23 PDT 2013


On 03/31/2013 05:04 PM, Chris Forbes wrote:
> Reported-by: `per` in #intel-gfx
>
> The size of the cache key varies, so store the actual size as well as
> the key blob itself, rather than just assuming it's the same as the size
> passed in.
>
> NOTE: This is a candidate for stable branches.
>
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
>   src/mesa/program/prog_cache.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/program/prog_cache.c b/src/mesa/program/prog_cache.c
> index 47f926b..8a581a7 100644
> --- a/src/mesa/program/prog_cache.c
> +++ b/src/mesa/program/prog_cache.c
> @@ -38,6 +38,7 @@ struct cache_item
>   {
>      GLuint hash;
>      void *key;
> +   GLuint keysize;

Since this doesn't store something the API uses, just use unsigned.

>      struct gl_program *program;
>      struct cache_item *next;
>   };
> @@ -183,7 +184,10 @@ _mesa_search_program_cache(struct gl_program_cache *cache,
>         struct cache_item *c;
>
>         for (c = cache->items[hash % cache->size]; c; c = c->next) {
> -         if (c->hash == hash && memcmp(c->key, key, keysize) == 0) {
> +         if (c->hash == hash &&
> +            c->keysize == keysize &&
> +            memcmp(c->key, key, keysize) == 0) {
> +
>               cache->last = c;
>               return c->program;
>            }
> @@ -207,6 +211,7 @@ _mesa_program_cache_insert(struct gl_context *ctx,
>
>      c->key = malloc(keysize);
>      memcpy(c->key, key, keysize);
> +   c->keysize = keysize;
>
>      c->program = program;  /* no refcount change */
>
> @@ -235,6 +240,7 @@ _mesa_shader_cache_insert(struct gl_context *ctx,
>
>      c->key = malloc(keysize);
>      memcpy(c->key, key, keysize);
> +   c->keysize = keysize;
>
>      c->program = (struct gl_program *)program;  /* no refcount change */
>
>



More information about the mesa-dev mailing list