Mesa (master): st/xa: fd management cleanups

Emil Velikov evelikov at kemper.freedesktop.org
Sun Nov 29 14:38:28 UTC 2015


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

Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Mon Nov 23 20:26:57 2015 +0000

st/xa: fd management cleanups

Analogous to previous commit.

Spotted by Coverity (CID 1339866)

Cc: mesa-stable at lists.freedesktop.org
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>

---

 src/gallium/state_trackers/xa/xa_tracker.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
index faa630c..d57464b 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.c
+++ b/src/gallium/state_trackers/xa/xa_tracker.c
@@ -152,11 +152,15 @@ xa_tracker_create(int drm_fd)
     struct xa_tracker *xa = calloc(1, sizeof(struct xa_tracker));
     enum xa_surface_type stype;
     unsigned int num_formats;
+    int fd = -1;
 
     if (!xa)
 	return NULL;
 
-    if (pipe_loader_drm_probe_fd(&xa->dev, dup(drm_fd)))
+    if (drm_fd < 0 || (fd = dup(drm_fd)) < 0)
+	goto out_no_fd;
+
+    if (pipe_loader_drm_probe_fd(&xa->dev, fd))
 	xa->screen = pipe_loader_create_screen(xa->dev);
 
     if (!xa->screen)
@@ -208,6 +212,9 @@ xa_tracker_create(int drm_fd)
  out_no_screen:
     if (xa->dev)
 	pipe_loader_release(&xa->dev, 1);
+    fd = -1;
+ out_no_fd:
+    close(fd);
     free(xa);
     return NULL;
 }




More information about the mesa-commit mailing list