diff options
author | NeilBrown <neilb@suse.de> | 2010-01-29 10:15:15 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-01-29 10:15:15 +1100 |
commit | 417a4b046dbf1aa430237ceb192d65cdb3381a05 (patch) | |
tree | f8be502259f16d05e5b502a3fe5be76e526b896b /mdmon.c | |
parent | 0c8675cbedee9263569a7f8fcbd2c82b23780145 (diff) |
mdmon: fix fd leak and possible buffer overrun.
We normally wouldn't close 'fd', and as 'buf' might not have
had a nul, strstr could have overrun it.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdmon.c')
-rw-r--r-- | mdmon.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -180,6 +180,7 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock) char buf[100]; int fd; struct mdstat_ent *mdstat; + int n; /* first rule of survival... don't off yourself */ if (pid == getpid()) @@ -191,12 +192,11 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock) if (fd < 0) return; - if (read(fd, buf, sizeof(buf)) < 0) { - close(fd); - return; - } + n = read(fd, buf, sizeof(buf)-1); + buf[sizeof(buf)-1] = 0; + close(fd); - if (!strstr(buf, "mdmon")) + if (n < 0 || !strstr(buf, "mdmon")) return; kill(pid, SIGTERM); |