diff options
author | itojun <itojun@openbsd.org> | 2002-08-09 02:12:15 +0000 |
---|---|---|
committer | itojun <itojun@openbsd.org> | 2002-08-09 02:12:15 +0000 |
commit | 9a161e2266384dc03ef642981868b20f74c86661 (patch) | |
tree | d4882d6c1aab547d9ff978a01049ec93ef033b67 /usr.sbin/mtrace | |
parent | socket flags are not inherited via accept() on linux; found and tested (diff) | |
download | wireguard-openbsd-9a161e2266384dc03ef642981868b20f74c86661.tar.xz wireguard-openbsd-9a161e2266384dc03ef642981868b20f74c86661.zip |
avoid dynamically-generated string to printf. die if fd_set overruns.
from xs@kittenz.org
Diffstat (limited to 'usr.sbin/mtrace')
-rw-r--r-- | usr.sbin/mtrace/mtrace.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/usr.sbin/mtrace/mtrace.c b/usr.sbin/mtrace/mtrace.c index 47c031b0f34..9ec63249cb0 100644 --- a/usr.sbin/mtrace/mtrace.c +++ b/usr.sbin/mtrace/mtrace.c @@ -52,7 +52,7 @@ #ifndef lint static char rcsid[] = - "@(#) $Id: mtrace.c,v 1.14 2002/06/14 21:35:01 todd Exp $"; + "@(#) $Id: mtrace.c,v 1.15 2002/08/09 02:12:15 itojun Exp $"; #endif #include <netdb.h> @@ -457,6 +457,8 @@ send_recv(dst, type, code, tries, save) */ while (TRUE) { FD_ZERO(&fds); + if (igmp_socket >= FD_SETSIZE) + log(LOG_ERR, 0, "descriptor too big"); FD_SET(igmp_socket, &fds); gettimeofday(&tv, 0); tv.tv_sec = tq.tv_sec + timeout - tv.tv_sec; @@ -625,8 +627,6 @@ passive_mode() int len, recvlen, dummy = 0; u_int32_t smask; - init_igmp(); - if (raddr) { if (IN_MULTICAST(ntohl(raddr))) k_join(raddr, INADDR_ANY); } else k_join(htonl(0xE0000120), INADDR_ANY); @@ -1676,18 +1676,16 @@ void log(int severity, int syserr, char *format, ...) { va_list ap; - char fmt[100]; switch (debug) { case 0: if (severity > LOG_WARNING) return; case 1: if (severity > LOG_NOTICE) return; case 2: if (severity > LOG_INFO ) return; default: - fmt[0] = '\0'; - if (severity == LOG_WARNING) strcat(fmt, "warning - "); - strncat(fmt, format, 80); + if (severity == LOG_WARNING) + fprintf(stderr, "warning - "); va_start(ap, format); - vfprintf(stderr, fmt, ap); + vfprintf(stderr, format, ap); va_end(ap); if (syserr == 0) fprintf(stderr, "\n"); |