diff options
author | marcel <marcel@FreeBSD.org> | 2014-03-02 03:34:06 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2014-03-02 03:34:06 +0000 |
commit | a6ba47be888a1125fb42b8aea1e01ac1ff85fd83 (patch) | |
tree | c3dff67fbe49d7fdb28c14105d5a247ef851fb0b /contrib/telnet | |
parent | dc2809ceff07db5510254b09a7155d4f29822a2c (diff) | |
download | FreeBSD-src-a6ba47be888a1125fb42b8aea1e01ac1ff85fd83.zip FreeBSD-src-a6ba47be888a1125fb42b8aea1e01ac1ff85fd83.tar.gz |
Improve upon previous commit:
1. Check return of mmap(2) (*)
2. Avoid FD leak when fstat fails.
3. Fix style(9).
(*) Pointed out by jmg@
Diffstat (limited to 'contrib/telnet')
-rw-r--r-- | contrib/telnet/telnetd/telnetd.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/contrib/telnet/telnetd/telnetd.c b/contrib/telnet/telnetd/telnetd.c index 454a377..2d31903 100644 --- a/contrib/telnet/telnetd/telnetd.c +++ b/contrib/telnet/telnetd/telnetd.c @@ -926,14 +926,15 @@ telnet(int f, int p, char *host) if (hostinfo && *IM) putf(IM, ptyibuf2); if (IF && if_fd != -1) { - if(fstat (if_fd, &statbuf)!=-1) { - if (statbuf.st_size > 0) { - if_buf = (char *) mmap (0, statbuf.st_size, PROT_READ, 0, if_fd, 0); - putf(if_buf, ptyibuf2); - munmap (if_buf, statbuf.st_size); + if (fstat(if_fd, &statbuf) != -1 && statbuf.st_size > 0) { + if_buf = (char *) mmap (0, statbuf.st_size, + PROT_READ, 0, if_fd, 0); + if (if_buf != MAP_FAILED) { + putf(if_buf, ptyibuf2); + munmap(if_buf, statbuf.st_size); + } } close (if_fd); - } } if (pcc) |