chiark / gitweb /
systemd-bootchart: Prevent leaking file descriptors in open-fdopen combination
[elogind.git] / src / bootchart / store.c
index 3900936acfc21da4a5338c8660d495f06f6f3f2e..8e9a62f91d9f9402cdcf14cab0190982f852833d 100644 (file)
@@ -330,9 +330,13 @@ schedstat_next:
                         /* ppid */
                         sprintf(filename, "%d/stat", pid);
                         fd = openat(procfd, filename, O_RDONLY);
+                        if (fd == -1)
+                                continue;
                         st = fdopen(fd, "r");
-                        if (!st)
+                        if (!st) {
+                                close(fd);
                                 continue;
+                        }
                         if (!fscanf(st, "%*s %*s %*s %i", &p)) {
                                 continue;
                         }
@@ -432,9 +436,13 @@ schedstat_next:
                 if (!ps->smaps) {
                         sprintf(filename, "%d/smaps", pid);
                         fd = openat(procfd, filename, O_RDONLY);
+                        if (fd == -1)
+                                continue;
                         ps->smaps = fdopen(fd, "r");
-                        if (!ps->smaps)
+                        if (!ps->smaps) {
+                                close(fd);
                                 continue;
+                        }
                         setvbuf(ps->smaps, smaps_buf, _IOFBF, sizeof(smaps_buf));
                 }
                 else {