Mesa (master): r600/drm: fix segfaults in winsys create failure path

Dave Airlie airlied at kemper.freedesktop.org
Thu Oct 14 22:41:22 UTC 2010


Module: Mesa
Branch: master
Commit: cbf2fb55432b8239ea9792338ee1d2fea89648ea
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cbf2fb55432b8239ea9792338ee1d2fea89648ea

Author: Keith Whitwell <keithw at vmware.com>
Date:   Thu Oct 14 16:42:38 2010 +0100

r600/drm: fix segfaults in winsys create failure path

Would try to destroy radeon->cman, radeon->kman both which were still
NULL.

Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/winsys/r600/drm/r600_drm.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_drm.c b/src/gallium/winsys/r600/drm/r600_drm.c
index 5f175a4..4916843 100644
--- a/src/gallium/winsys/r600/drm/r600_drm.c
+++ b/src/gallium/winsys/r600/drm/r600_drm.c
@@ -179,9 +179,15 @@ struct radeon *radeon_decref(struct radeon *radeon)
 		return NULL;
 	}
 
-	radeon->cman->destroy(radeon->cman);
-	radeon->kman->destroy(radeon->kman);
-	drmClose(radeon->fd);
+        if (radeon->cman)
+           radeon->cman->destroy(radeon->cman);
+
+        if (radeon->kman)
+           radeon->kman->destroy(radeon->kman);
+
+        if (radeon->fd >= 0)
+           drmClose(radeon->fd);
+
 	free(radeon);
 	return NULL;
 }




More information about the mesa-commit mailing list