bootchart: properly terminate string

systemd-199/src/bootchart/store.c:289: buffer_size_warning: Calling
strncpy with a maximum size argument of 256 bytes on destination array
"ps->name" of size 256 bytes might leave the destination string
unterminated.

...and indeed, the string was used as NULL-terminated later on.

pid_cmdline_strncpy is renamed to pid_cmdline_strscpy to commemorate
the fact that it *does* properly terminate the string.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2013-03-28 23:41:07 -04:00
parent 2688887653
commit c309a7137b
+6 -5
View File
@@ -34,6 +34,7 @@
#include <time.h>
#include "util.h"
#include "strxcpyx.h"
#include "store.h"
#include "bootchart.h"
@@ -89,7 +90,7 @@ static char *bufgetline(char *buf) {
return c;
}
static int pid_cmdline_strncpy(char *buffer, int pid, size_t buf_len) {
static int pid_cmdline_strscpy(char *buffer, size_t buf_len, int pid) {
char filename[PATH_MAX];
int _cleanup_close_ fd=-1;
ssize_t n;
@@ -286,11 +287,11 @@ schedstat_next:
if (!sscanf(buf, "%s %*s %*s", key))
continue;
strncpy(ps->name, key, 256);
strscpy(ps->name, sizeof(ps->name), key);
/* cmdline */
if (arg_show_cmdline)
pid_cmdline_strncpy(ps->name, pid, 256);
pid_cmdline_strscpy(ps->name, sizeof(ps->name), pid);
/* discard line 2 */
m = bufgetline(buf);
@@ -449,11 +450,11 @@ catch_rename:
if (!sscanf(buf, "%s %*s %*s", key))
continue;
strncpy(ps->name, key, 256);
strscpy(ps->name, sizeof(ps->name), key);
/* cmdline */
if (arg_show_cmdline)
pid_cmdline_strncpy(ps->name, pid, 256);
pid_cmdline_strscpy(ps->name, sizeof(ps->name), pid);
}
}
}