v4l2codecs: Fix FD leak during device enumeration
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 8 Apr 2020 18:21:30 +0000 (14:21 -0400)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 8 Apr 2020 20:25:44 +0000 (20:25 +0000)
This was revealed by Coverity.

CID 1461248

sys/v4l2codecs/gstv4l2codecdevice.c

index 95bf717..eff61fa 100644 (file)
@@ -26,6 +26,7 @@
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <sys/sysmacros.h>
+#include <unistd.h>
 
 #define GST_CAT_DEFAULT gstv4l2codecs_debug
 GST_DEBUG_CATEGORY_EXTERN (gstv4l2codecs_debug);
@@ -312,6 +313,7 @@ gst_v4l2_codec_find_devices (void)
     gint fd;
     struct media_v2_topology topology;
     GList *codec_entities, *c;
+    gboolean ret;
 
     fd = open (path, 0);
     if (fd < 0)
@@ -319,7 +321,10 @@ gst_v4l2_codec_find_devices (void)
 
     GST_DEBUG ("Analysing media device '%s'", path);
 
-    if (!get_topology (fd, &topology)) {
+    ret = get_topology (fd, &topology);
+    close (fd);
+
+    if (!ret) {
       clear_topology (&topology);
       continue;
     }