[systemd-devel] [PATCH] systemd-bootchart: Repair Entropy Graph

Daniel Mack daniel at zonque.org
Mon Mar 30 00:45:11 PDT 2015


On 03/29/2015 08:46 PM, Alexander Sverdlin wrote:
> 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.

Applied, thanks!

> ---
>  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);
>                  }
>          }
> 
> 



More information about the systemd-devel mailing list