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 *);