Module Name: src Committed By: christos Date: Fri Oct 11 18:20:20 UTC 2019
Modified Files: src/external/bsd/libpcap/dist: pcap-bpf.c Log Message: Fix the rest of the places where strncpy was called instead of pcap_strlcpy to copy the interface name. The kernel requires the interface to be NUL terminated anyway and will fail with ENAMETOOLONG otherwise. Pointed out by Robert Swindells. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/external/bsd/libpcap/dist/pcap-bpf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/libpcap/dist/pcap-bpf.c diff -u src/external/bsd/libpcap/dist/pcap-bpf.c:1.9 src/external/bsd/libpcap/dist/pcap-bpf.c:1.10 --- src/external/bsd/libpcap/dist/pcap-bpf.c:1.9 Tue Oct 1 12:02:11 2019 +++ src/external/bsd/libpcap/dist/pcap-bpf.c Fri Oct 11 14:20:20 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pcap-bpf.c,v 1.9 2019/10/01 16:02:11 christos Exp $ */ +/* $NetBSD: pcap-bpf.c,v 1.10 2019/10/11 18:20:20 christos Exp $ */ /* * Copyright (c) 1993, 1994, 1995, 1996, 1998 @@ -22,7 +22,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: pcap-bpf.c,v 1.9 2019/10/01 16:02:11 christos Exp $"); +__RCSID("$NetBSD: pcap-bpf.c,v 1.10 2019/10/11 18:20:20 christos Exp $"); #ifdef HAVE_CONFIG_H #include <config.h> @@ -628,7 +628,7 @@ bpf_open_and_bind(const char *name, char /* * Now bind to the device. */ - (void)strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); + pcap_strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) { switch (errno) { @@ -835,7 +835,7 @@ pcap_can_set_rfmon_bpf(pcap_t *p) /* * Now bind to the device. */ - (void)strncpy(ifr.ifr_name, p->opt.device, sizeof(ifr.ifr_name)); + pcap_strlcpy(ifr.ifr_name, p->opt.device, sizeof(ifr.ifr_name)); if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) { switch (errno) { @@ -1445,7 +1445,7 @@ pcap_cleanup_bpf(pcap_t *p) strerror(errno)); } else { memset(&req, 0, sizeof(req)); - strncpy(req.ifm_name, pb->device, + pcap_strlcpy(req.ifm_name, pb->device, sizeof(req.ifm_name)); if (ioctl(sock, SIOCGIFMEDIA, &req) < 0) { fprintf(stderr, @@ -1459,7 +1459,7 @@ pcap_cleanup_bpf(pcap_t *p) * turn it off. */ memset(&ifr, 0, sizeof(ifr)); - (void)strncpy(ifr.ifr_name, + pcap_strlcpy(ifr.ifr_name, pb->device, sizeof(ifr.ifr_name)); ifr.ifr_media = @@ -2002,7 +2002,7 @@ pcap_activate_bpf(pcap_t *p) status = PCAP_ERROR; goto bad; } - (void)strncpy(ifrname, p->opt.device, ifnamsiz); + pcap_strlcpy(ifrname, p->opt.device, ifnamsiz); if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) { pcap_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, errno, "BIOCSETIF: %s", p->opt.device); @@ -2033,7 +2033,7 @@ pcap_activate_bpf(pcap_t *p) /* * Now bind to the device. */ - (void)strncpy(ifrname, p->opt.device, ifnamsiz); + pcap_strlcpy(ifrname, p->opt.device, ifnamsiz); #ifdef BIOCSETLIF if (ioctl(fd, BIOCSETLIF, (caddr_t)&ifr) < 0) #else @@ -2066,7 +2066,7 @@ pcap_activate_bpf(pcap_t *p) */ (void) ioctl(fd, BIOCSBLEN, (caddr_t)&v); - (void)strncpy(ifrname, p->opt.device, ifnamsiz); + pcap_strlcpy(ifrname, p->opt.device, ifnamsiz); #ifdef BIOCSETLIF if (ioctl(fd, BIOCSETLIF, (caddr_t)&ifr) >= 0) #else @@ -2764,7 +2764,7 @@ get_if_flags(const char *name, bpf_u_int return (-1); } memset(&req, 0, sizeof(req)); - strncpy(req.ifm_name, name, sizeof(req.ifm_name)); + pcap_strlcpy(req.ifm_name, name, sizeof(req.ifm_name)); if (ioctl(sock, SIOCGIFMEDIA, &req) < 0) { if (errno == EOPNOTSUPP || errno == EINVAL || errno == ENOTTY || errno == ENODEV || errno == EPERM) { @@ -2891,7 +2891,7 @@ monitor_mode(pcap_t *p, int set) } memset(&req, 0, sizeof req); - strncpy(req.ifm_name, p->opt.device, sizeof req.ifm_name); + pcap_strlcpy(req.ifm_name, p->opt.device, sizeof(req.ifm_name)); /* * Find out how many media types we have. @@ -3001,7 +3001,7 @@ monitor_mode(pcap_t *p, int set) return (PCAP_ERROR); } memset(&ifr, 0, sizeof(ifr)); - (void)strncpy(ifr.ifr_name, p->opt.device, + pcap_strlcpy(ifr.ifr_name, p->opt.device, sizeof(ifr.ifr_name)); ifr.ifr_media = req.ifm_current | IFM_IEEE80211_MONITOR; if (ioctl(sock, SIOCSIFMEDIA, &ifr) == -1) {