mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-08-19 04:07:35 +00:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user