Skip to content
Browse files

Use strlcpy instead of strncpy

Also make sure the read cmdline is terminated with a null byte.

Change-Id: I6b4aa197ce9bc072a912b7163e8616a03b39c3fe
  • Loading branch information...
1 parent 6940ec4 commit b953fc284983ac8eac9174bcfffedd18cb48ac7e @kruton kruton committed
Showing with 9 additions and 8 deletions.
  1. +9 −8 toolbox/lsof.c
View
17 toolbox/lsof.c
@@ -178,8 +178,7 @@ void lsof_dumpinfo(pid_t pid)
if (!stat(info.path, &pidstat)) {
pw = getpwuid(pidstat.st_uid);
if (pw) {
- strncpy(info.user, pw->pw_name, USER_DISPLAY_MAX - 1);
- info.user[USER_DISPLAY_MAX - 1] = '\0';
+ strlcpy(info.user, pw->pw_name, sizeof(info.user));
} else {
snprintf(info.user, USER_DISPLAY_MAX, "%d", (int)pidstat.st_uid);
}
@@ -194,18 +193,20 @@ void lsof_dumpinfo(pid_t pid)
fprintf(stderr, "Couldn't read %s\n", info.path);
return;
}
+
char cmdline[PATH_MAX];
- if (read(fd, cmdline, sizeof(cmdline)) < 0) {
+ int numRead = read(fd, cmdline, sizeof(cmdline) - 1);
+ close(fd);
+
+ if (numRead < 0) {
fprintf(stderr, "Error reading cmdline: %s: %s\n", info.path, strerror(errno));
- close(fd);
return;
}
- close(fd);
- info.path[info.parent_length] = '\0';
+
+ cmdline[numRead] = '\0';
// We only want the basename of the cmdline
- strncpy(info.cmdline, basename(cmdline), sizeof(info.cmdline));
- info.cmdline[sizeof(info.cmdline)-1] = '\0';
+ strlcpy(info.cmdline, basename(cmdline), sizeof(info.cmdline));
// Read each of these symlinks
print_type("cwd", &info);

0 comments on commit b953fc2

Please sign in to comment.
Something went wrong with that request. Please try again.