[prev in list] [next in list] [prev in thread] [next in thread] 

List:       systemd-devel
Subject:    [systemd-devel] [PATCH] systemd-bootchart: Repair Entropy Graph
From:       Alexander Sverdlin <alexander.sverdlin () gmail ! com>
Date:       2015-03-29 18:46:42
Message-ID: 55184892.3030102 () gmail ! com
[Download RAW message or body]

Entropy Graph code doesn't handle the error condition if open() of /proc entry
fails. Moreover, the file is only opened once and only first sample will contain
the correct value because the return value of pread() is also not handled
properly and file is not re-opened. Fix both problems.
---
 src/bootchart/store.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/bootchart/store.c b/src/bootchart/store.c
index 8e9a62f..fb3dc9a 100644
--- a/src/bootchart/store.c
+++ b/src/bootchart/store.c
@@ -119,7 +119,7 @@ void log_sample(int sample, struct list_sample_data **ptr) {
         int c;
         int p;
         int mod;
-        static int e_fd;
+        static int e_fd = -1;
         ssize_t s;
         ssize_t n;
         struct dirent *ent;
@@ -215,16 +215,21 @@ schedstat_next:
         }

         if (arg_entropy) {
-                if (!e_fd) {
+                if (e_fd < 0) {
                         e_fd = openat(procfd, "sys/kernel/random/entropy_avail", \
O_RDONLY); +                        if (e_fd == -1) {
+                                log_error_errno(errno, "Failed to open \
/proc/sys/kernel/random/entropy_avail: %m"); +                                \
exit(EXIT_FAILURE); +                        }
                 }

-                if (e_fd) {
-                        n = pread(e_fd, buf, sizeof(buf) - 1, 0);
-                        if (n > 0) {
-                                buf[n] = '\0';
-                                sampledata->entropy_avail = atoi(buf);
-                        }
+                n = pread(e_fd, buf, sizeof(buf) - 1, 0);
+                if (n <= 0) {
+                        close(e_fd);
+                        e_fd = -1;
+                } else {
+                        buf[n] = '\0';
+                        sampledata->entropy_avail = atoi(buf);
                 }
         }


_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic