diff options
author | Lukas Nykryn <lnykryn@redhat.com> | 2013-01-10 14:36:42 +0100 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2013-01-10 15:22:58 +0100 |
commit | ef2648c12793ded136eb81b2482f84027cade614 (patch) | |
tree | bcfdc19d0474293a53cf137f3079e686c69ae686 | |
parent | 1d010426c01044350b2b32d8b3af5d064f7dfe27 (diff) |
bootchart: make sure that every read buffer is null terminated
-rw-r--r-- | src/bootchart/log.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/bootchart/log.c b/src/bootchart/log.c index eda001a20e..78f0cab178 100644 --- a/src/bootchart/log.c +++ b/src/bootchart/log.c @@ -182,8 +182,10 @@ schedstat_next: if (e_fd) { n = pread(e_fd, buf, sizeof(buf) - 1, 0); - if (n > 0) + if (n > 0) { + buf[n] = '\0'; entropy_avail[sample] = atoi(buf); + } } } @@ -256,6 +258,7 @@ schedstat_next: close(ps->sched); continue; } + buf[s] = '\0'; if (!sscanf(buf, "%s %*s %*s", key)) continue; @@ -337,8 +340,8 @@ schedstat_next: if (ps->schedstat == -1) continue; } - - if (pread(ps->schedstat, buf, sizeof(buf) - 1, 0) <= 0) { + s = pread(ps->schedstat, buf, sizeof(buf) - 1, 0); + if (s <= 0) { /* clean up our file descriptors - assume that the process exited */ close(ps->schedstat); if (ps->sched) @@ -347,6 +350,8 @@ schedstat_next: // fclose(ps->smaps); continue; } + buf[s] = '\0'; + if (!sscanf(buf, "%s %s %*s", rt, wt)) continue; @@ -401,7 +406,8 @@ catch_rename: if (ps->sched == -1) continue; } - if (pread(ps->sched, buf, sizeof(buf) - 1, 0) <= 0) { + s = pread(ps->sched, buf, sizeof(buf) - 1, 0); + if (s <= 0) { /* clean up file descriptors */ close(ps->sched); if (ps->schedstat) @@ -410,6 +416,7 @@ catch_rename: // fclose(ps->smaps); continue; } + buf[s] = '\0'; if (!sscanf(buf, "%s %*s %*s", key)) continue; |