OSDN Git Service

nouveau: Mark nouveau subchannel unbound nouveau_grobj_free
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Thu, 24 Nov 2011 13:08:53 +0000 (14:08 +0100)
committerYounes Manton <younes.m@gmail.com>
Sun, 27 Nov 2011 17:28:20 +0000 (12:28 -0500)
Valgrind throws warns about a user-after-free if you try to bind a
new subchannel after the old one in that slot was freed,
so remove it from the channel list.

Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
nouveau/nouveau_grobj.c

index c6b98f1..36344b9 100644 (file)
@@ -100,12 +100,13 @@ nouveau_grobj_free(struct nouveau_grobj **grobj)
                struct drm_nouveau_gpuobj_free f;
 
                FIRE_RING(&chan->base);
-
                f.channel = chan->drm.channel;
                f.handle  = nvgrobj->base.handle;
                drmCommandWrite(nvdev->fd, DRM_NOUVEAU_GPUOBJ_FREE,
                                &f, sizeof(f)); 
        }
+       if (nvgrobj->base.bound != NOUVEAU_GROBJ_UNBOUND)
+               chan->base.subc[nvgrobj->base.subc].gr = NULL;
        free(nvgrobj);
 }