etnaviv: don't dereference etna_resource pointer if allocation fails
authorAleksander Morgado <aleksander@aleksander.es>
Thu, 6 Jul 2017 09:35:37 +0000 (11:35 +0200)
committerChristian Gmeiner <christian.gmeiner@gmail.com>
Thu, 6 Jul 2017 19:06:25 +0000 (21:06 +0200)
The check for the pointer being non-NULL was being done too late.

Signed-off-by: Aleksander Morgado <aleksander@aleksander.es>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
src/gallium/drivers/etnaviv/etnaviv_resource.c

index 97e0a15597fa4b8a43ba185c6ec234dcb17190cc..a709482c1b6b3b9c755bc3b197d44dbf8f8fd4fd 100644 (file)
@@ -320,9 +320,9 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
                           struct winsys_handle *handle, unsigned usage)
 {
    struct etna_screen *screen = etna_screen(pscreen);
-   struct etna_resource *rsc = CALLOC_STRUCT(etna_resource);
-   struct etna_resource_level *level = &rsc->levels[0];
-   struct pipe_resource *prsc = &rsc->base;
+   struct etna_resource *rsc;
+   struct etna_resource_level *level;
+   struct pipe_resource *prsc;
    struct pipe_resource *ptiled = NULL;
 
    DBG("target=%d, format=%s, %ux%ux%u, array_size=%u, last_level=%u, "
@@ -331,9 +331,13 @@ etna_resource_from_handle(struct pipe_screen *pscreen,
        tmpl->height0, tmpl->depth0, tmpl->array_size, tmpl->last_level,
        tmpl->nr_samples, tmpl->usage, tmpl->bind, tmpl->flags);
 
+   rsc = CALLOC_STRUCT(etna_resource);
    if (!rsc)
       return NULL;
 
+   level = &rsc->levels[0];
+   prsc = &rsc->base;
+
    *prsc = *tmpl;
 
    pipe_reference_init(&prsc->reference, 1);