Module Name:    src
Committed By:   christos
Date:           Thu Apr  7 03:22:15 UTC 2016

Modified Files:
        src/sys/net: if_arcsubr.c if_ecosubr.c if_ethersubr.c if_fddisubr.c
            if_ieee1394subr.c if_tokensubr.c
        src/sys/netinet: if_arp.c if_inarp.h

Log Message:
- tidy up error messages
- add a length argument to arpresolve()
- add KASSERT for overflow


To generate a diff of this commit:
cvs rdiff -u -r1.70 -r1.71 src/sys/net/if_arcsubr.c
cvs rdiff -u -r1.44 -r1.45 src/sys/net/if_ecosubr.c
cvs rdiff -u -r1.216 -r1.217 src/sys/net/if_ethersubr.c
cvs rdiff -u -r1.96 -r1.97 src/sys/net/if_fddisubr.c
cvs rdiff -u -r1.51 -r1.52 src/sys/net/if_ieee1394subr.c
cvs rdiff -u -r1.73 -r1.74 src/sys/net/if_tokensubr.c
cvs rdiff -u -r1.204 -r1.205 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.47 -r1.48 src/sys/netinet/if_inarp.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/if_arcsubr.c
diff -u src/sys/net/if_arcsubr.c:1.70 src/sys/net/if_arcsubr.c:1.71
--- src/sys/net/if_arcsubr.c:1.70	Tue Feb  9 09:43:16 2016
+++ src/sys/net/if_arcsubr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arcsubr.c,v 1.70 2016/02/09 14:43:16 ozaki-r Exp $	*/
+/*	$NetBSD: if_arcsubr.c,v 1.71 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Ignatios Souvatzis
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arcsubr.c,v 1.70 2016/02/09 14:43:16 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arcsubr.c,v 1.71 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -151,7 +151,8 @@ arc_output(struct ifnet *ifp, struct mbu
 			adst = arcbroadcastaddr; /* ARCnet broadcast address */
 		else if (ifp->if_flags & IFF_NOARP)
 			adst = ntohl(satocsin(dst)->sin_addr.s_addr) & 0xFF;
-		else if ((error = arpresolve(ifp, rt, m, dst, &adst)) != 0)
+		else if ((error = arpresolve(ifp, rt, m, dst, &adst,
+		    sizeof(adst))) != 0)
 			return error == EWOULDBLOCK ? 0 : error;
 
 		/* If broadcasting on a simplex interface, loopback a copy */

Index: src/sys/net/if_ecosubr.c
diff -u src/sys/net/if_ecosubr.c:1.44 src/sys/net/if_ecosubr.c:1.45
--- src/sys/net/if_ecosubr.c:1.44	Mon Aug 24 18:21:26 2015
+++ src/sys/net/if_ecosubr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ecosubr.c,v 1.44 2015/08/24 22:21:26 pooka Exp $	*/
+/*	$NetBSD: if_ecosubr.c,v 1.45 2016/04/07 03:22:15 christos Exp $	*/
 
 /*-
  * Copyright (c) 2001 Ben Harris
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ecosubr.c,v 1.44 2015/08/24 22:21:26 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ecosubr.c,v 1.45 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -198,7 +198,8 @@ eco_output(struct ifnet *ifp, struct mbu
                 	memcpy(ehdr.eco_dhost, eco_broadcastaddr,
 			    ECO_ADDR_LEN);
 
-		else if (!arpresolve(ifp, rt, m, dst, ehdr.eco_dhost))
+		else if (!arpresolve(ifp, rt, m, dst, ehdr.eco_dhost,
+		    sizeof(ehdr.eco_dhost)))
 			return (0);	/* if not yet resolved */
 		/* If broadcasting on a simplex interface, loopback a copy */
 		if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))

Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.216 src/sys/net/if_ethersubr.c:1.217
--- src/sys/net/if_ethersubr.c:1.216	Tue Feb  9 03:32:12 2016
+++ src/sys/net/if_ethersubr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.216 2016/02/09 08:32:12 ozaki-r Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.217 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.216 2016/02/09 08:32:12 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.217 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -243,7 +243,8 @@ ether_output(struct ifnet * const ifp0, 
 			(void)memcpy(edst, etherbroadcastaddr, sizeof(edst));
 		else if (m->m_flags & M_MCAST)
 			ETHER_MAP_IP_MULTICAST(&satocsin(dst)->sin_addr, edst);
-		else if ((error = arpresolve(ifp, rt, m, dst, edst)) != 0)
+		else if ((error = arpresolve(ifp, rt, m, dst, edst,
+		    sizeof(edst))) != 0)
 			return error == EWOULDBLOCK ? 0 : error;
 		/* If broadcasting on a simplex interface, loopback a copy */
 		if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))

Index: src/sys/net/if_fddisubr.c
diff -u src/sys/net/if_fddisubr.c:1.96 src/sys/net/if_fddisubr.c:1.97
--- src/sys/net/if_fddisubr.c:1.96	Tue Feb  9 03:32:12 2016
+++ src/sys/net/if_fddisubr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_fddisubr.c,v 1.96 2016/02/09 08:32:12 ozaki-r Exp $	*/
+/*	$NetBSD: if_fddisubr.c,v 1.97 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -96,7 +96,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_fddisubr.c,v 1.96 2016/02/09 08:32:12 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_fddisubr.c,v 1.97 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_gateway.h"
@@ -235,7 +235,8 @@ fddi_output(struct ifnet *ifp0, struct m
 		else if (m->m_flags & M_MCAST) {
 			ETHER_MAP_IP_MULTICAST(&satocsin(dst)->sin_addr,
 			    (char *)edst);
-		} else if ((error = arpresolve(ifp, rt, m, dst, edst)) != 0)
+		} else if ((error = arpresolve(ifp, rt, m, dst, edst,
+		    sizeof(edst))) != 0)
 			return error == EWOULDBLOCK ? 0 : error;
 		/* If broadcasting on a simplex interface, loopback a copy */
 		if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))

Index: src/sys/net/if_ieee1394subr.c
diff -u src/sys/net/if_ieee1394subr.c:1.51 src/sys/net/if_ieee1394subr.c:1.52
--- src/sys/net/if_ieee1394subr.c:1.51	Tue Oct 13 08:33:07 2015
+++ src/sys/net/if_ieee1394subr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ieee1394subr.c,v 1.51 2015/10/13 12:33:07 roy Exp $	*/
+/*	$NetBSD: if_ieee1394subr.c,v 1.52 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ieee1394subr.c,v 1.51 2015/10/13 12:33:07 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ieee1394subr.c,v 1.52 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -139,7 +139,8 @@ ieee1394_output(struct ifnet *ifp, struc
 #ifdef INET
 	case AF_INET:
 		if (unicast &&
-		    (error = arpresolve(ifp, rt, m0, dst, (u_char *)hwdst)) !=0)
+		    (error = arpresolve(ifp, rt, m0, dst, hwdst,
+			sizeof(*hwdst))) != 0)
 			return error == EWOULDBLOCK ? 0 : error;
 		/* if broadcasting on a simplex interface, loopback a copy */
 		if ((m0->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX))

Index: src/sys/net/if_tokensubr.c
diff -u src/sys/net/if_tokensubr.c:1.73 src/sys/net/if_tokensubr.c:1.74
--- src/sys/net/if_tokensubr.c:1.73	Tue Feb  9 03:32:12 2016
+++ src/sys/net/if_tokensubr.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tokensubr.c,v 1.73 2016/02/09 08:32:12 ozaki-r Exp $	*/
+/*	$NetBSD: if_tokensubr.c,v 1.74 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1989, 1993
@@ -92,7 +92,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tokensubr.c,v 1.73 2016/02/09 08:32:12 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tokensubr.c,v 1.74 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -219,7 +219,7 @@ token_output(struct ifnet *ifp0, struct 
  */
 		else {
 			struct llentry *la;
-			if (!arpresolve(ifp, rt, m, dst, edst))
+			if (!arpresolve(ifp, rt, m, dst, edst, sizeof(edst)))
 				return (0);	/* if not yet resolved */
 			la = rt->rt_llinfo;
 			KASSERT(la != NULL);

Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.204 src/sys/netinet/if_arp.c:1.205
--- src/sys/netinet/if_arp.c:1.204	Mon Apr  4 03:37:07 2016
+++ src/sys/netinet/if_arp.c	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arp.c,v 1.204 2016/04/04 07:37:07 ozaki-r Exp $	*/
+/*	$NetBSD: if_arp.c,v 1.205 2016/04/07 03:22:15 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.204 2016/04/04 07:37:07 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.205 2016/04/07 03:22:15 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -573,7 +573,7 @@ arp_rtrequest(int req, struct rtentry *r
 
 		if (gate->sa_family != AF_LINK ||
 		    gate->sa_len < sockaddr_dl_measure(0, ifp->if_addrlen)) {
-			log(LOG_DEBUG, "arp_rtrequest: bad gateway value\n");
+			log(LOG_DEBUG, "%s: bad gateway value\n", __func__);
 			break;
 		}
 
@@ -693,7 +693,7 @@ arprequest(struct ifnet *ifp,
  */
 int
 arpresolve(struct ifnet *ifp, struct rtentry *rt, struct mbuf *m,
-    const struct sockaddr *dst, u_char *desten)
+    const struct sockaddr *dst, void *desten, size_t destlen)
 {
 	struct llentry *la;
 	const char *create_lookup;
@@ -708,6 +708,7 @@ arpresolve(struct ifnet *ifp, struct rte
 
 	if ((la->la_flags & LLE_VALID) &&
 	    ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
+		KASSERT(destlen >= ifp->if_addrlen);
 		memcpy(desten, &la->ll_addr, ifp->if_addrlen);
 		LLE_RUNLOCK(la);
 		return 0;
@@ -719,7 +720,7 @@ arpresolve(struct ifnet *ifp, struct rte
 #ifdef	DIAGNOSTIC
 	if (rt->rt_expire == 0) {
 		/* This should never happen. (Should it? -gwr) */
-		printf("arpresolve: unresolved and rt_expire == 0\n");
+		printf("%s: unresolved and rt_expire == 0\n", __func__);
 		/* Set expiration time to now (expired). */
 		rt->rt_expire = time_uptime;
 	}
@@ -767,6 +768,7 @@ notfound:
 	if ((la->la_flags & LLE_VALID) &&
 	    ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime))
 	{
+		KASSERT(destlen >= ifp->if_addrlen);
 		memcpy(desten, &la->ll_addr, ifp->if_addrlen);
 		renew = false;
 		/*
@@ -800,8 +802,8 @@ notfound:
 
 	if (la->la_flags & LLE_STATIC) {   /* should not happen! */
 		LLE_RUNLOCK(la);
-		log(LOG_DEBUG, "arpresolve: ouch, empty static llinfo for %s\n",
-		    inet_ntoa(satocsin(dst)->sin_addr));
+		log(LOG_DEBUG, "%s: ouch, empty static llinfo for %s\n",
+		    __func__, inet_ntoa(satocsin(dst)->sin_addr));
 		error = EINVAL;
 		goto bad;
 	}
@@ -1225,6 +1227,7 @@ in_arpinput(struct mbuf *m)
 	}
 #endif /* NTOKEN > 0 */
 
+	KASSERT(sizeof(la->ll_addr) >= ifp->if_addrlen);
 	(void)memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen);
 	la->la_flags |= LLE_VALID;
 	la->la_expire = time_uptime + arpt_keep;
@@ -1431,8 +1434,8 @@ arp_ifinit(struct ifnet *ifp, struct ifa
 				 (struct sockaddr *)IA_SIN(ifa));
 		IF_AFDATA_WUNLOCK(ifp);
 		if (lle == NULL)
-			log(LOG_INFO, "arp_ifinit: cannot create arp "
-			    "entry for interface address\n");
+			log(LOG_INFO, "%s: cannot create arp entry for"
+			    " interface address\n", __func__);
 		else {
 			arp_init_llentry(ifp, lle);
 			LLE_RUNLOCK(lle);
@@ -1535,10 +1538,9 @@ arp_dad_start(struct ifaddr *ifa)
 	 */
 	if (!(ia->ia4_flags & IN_IFF_TENTATIVE)) {
 		log(LOG_DEBUG,
-			"arp_dad_start: called with non-tentative address "
-			"%s(%s)\n",
-			in_fmtaddr(ia->ia_addr.sin_addr),
-			ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
+		    "%s: called with non-tentative address %s(%s)\n", __func__,
+		    in_fmtaddr(ia->ia_addr.sin_addr),
+		    ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
 		return;
 	}
 	if (!ip_dad_count) {
@@ -1561,10 +1563,9 @@ arp_dad_start(struct ifaddr *ifa)
 
 	dp = malloc(sizeof(*dp), M_IPARP, M_NOWAIT);
 	if (dp == NULL) {
-		log(LOG_ERR, "arp_dad_start: memory allocation failed for "
-			"%s(%s)\n",
-			in_fmtaddr(ia->ia_addr.sin_addr),
-			ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
+		log(LOG_ERR, "%s: memory allocation failed for %s(%s)\n",
+		    __func__, in_fmtaddr(ia->ia_addr.sin_addr),
+		    ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
 		return;
 	}
 	memset(dp, 0, sizeof(*dp));
@@ -1623,33 +1624,32 @@ arp_dad_timer(struct ifaddr *ifa)
 
 	/* Sanity check */
 	if (ia == NULL) {
-		log(LOG_ERR, "arp_dad_timer: called with null parameter\n");
+		log(LOG_ERR, "%s: called with null parameter\n", __func__);
 		goto done;
 	}
 	dp = arp_dad_find(ifa);
 	if (dp == NULL) {
-		log(LOG_ERR, "arp_dad_timer: DAD structure not found\n");
+		log(LOG_ERR, "%s: DAD structure not found\n", __func__);
 		goto done;
 	}
 	if (ia->ia4_flags & IN_IFF_DUPLICATED) {
-		log(LOG_ERR, "nd4_dad_timer: called with duplicate address "
-			"%s(%s)\n",
-			in_fmtaddr(ia->ia_addr.sin_addr),
-			ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
+		log(LOG_ERR, "%s: called with duplicate address %s(%s)\n",
+		    __func__, in_fmtaddr(ia->ia_addr.sin_addr),
+		    ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
 		goto done;
 	}
-	if ((ia->ia4_flags & IN_IFF_TENTATIVE) == 0 && dp->dad_arp_acount == 0){
-		log(LOG_ERR, "arp_dad_timer: called with non-tentative address "
-			"%s(%s)\n",
-			in_fmtaddr(ia->ia_addr.sin_addr),
-			ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
+	if ((ia->ia4_flags & IN_IFF_TENTATIVE) == 0 && dp->dad_arp_acount == 0)
+	{
+		log(LOG_ERR, "%s: called with non-tentative address %s(%s)\n",
+		    __func__, in_fmtaddr(ia->ia_addr.sin_addr),
+		    ifa->ifa_ifp ? if_name(ifa->ifa_ifp) : "???");
 		goto done;
 	}
 
 	/* timeouted with IFF_{RUNNING,UP} check */
 	if (dp->dad_arp_tcount > dad_maxtry) {
 		arplog((LOG_INFO, "%s: could not run DAD, driver problem?\n",
-			if_name(ifa->ifa_ifp)));
+		    if_name(ifa->ifa_ifp)));
 
 		TAILQ_REMOVE(&dadq, dp, dad_list);
 		free(dp, M_IPARP);
@@ -1725,13 +1725,13 @@ arp_dad_duplicated(struct ifaddr *ifa)
 
 	dp = arp_dad_find(ifa);
 	if (dp == NULL) {
-		log(LOG_ERR, "arp_dad_duplicated: DAD structure not found\n");
+		log(LOG_ERR, "%s: DAD structure not found\n", __func__);
 		return;
 	}
 
 	ifp = ifa->ifa_ifp;
-	log(LOG_ERR, "%s: DAD detected duplicate IPv4 address %s: "
-	    "ARP out=%d\n",
+	log(LOG_ERR,
+	    "%s: DAD detected duplicate IPv4 address %s: ARP out=%d\n",
 	    if_name(ifp), in_fmtaddr(ia->ia_addr.sin_addr),
 	    dp->dad_arp_ocount);
 

Index: src/sys/netinet/if_inarp.h
diff -u src/sys/netinet/if_inarp.h:1.47 src/sys/netinet/if_inarp.h:1.48
--- src/sys/netinet/if_inarp.h:1.47	Thu May 21 05:26:18 2015
+++ src/sys/netinet/if_inarp.h	Wed Apr  6 23:22:15 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_inarp.h,v 1.47 2015/05/21 09:26:18 ozaki-r Exp $	*/
+/*	$NetBSD: if_inarp.h,v 1.48 2016/04/07 03:22:15 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -76,7 +76,7 @@ extern struct ifqueue arpintrq;
 void arp_ifinit(struct ifnet *, struct ifaddr *);
 void arp_rtrequest(int, struct rtentry *, const struct rt_addrinfo *);
 int arpresolve(struct ifnet *, struct rtentry *, struct mbuf *,
-		    const struct sockaddr *, u_char *);
+    const struct sockaddr *, void *, size_t);
 void arpintr(void);
 void arprequest(struct ifnet *, const struct in_addr *, const struct in_addr *,
     const u_int8_t *);

Reply via email to