diff options
author | ae <ae@FreeBSD.org> | 2015-04-09 12:57:58 +0000 |
---|---|---|
committer | ae <ae@FreeBSD.org> | 2015-04-09 12:57:58 +0000 |
commit | 1af0fcc87ba7c58849e9f6ad9e0d7a8f8ace2e4d (patch) | |
tree | 8da1eee2e62246fb5fdd43493806509c185bfddd | |
parent | 3a75ccf5ce7d33b45ba14ee893d936b7a2c76b72 (diff) | |
download | FreeBSD-src-1af0fcc87ba7c58849e9f6ad9e0d7a8f8ace2e4d.zip FreeBSD-src-1af0fcc87ba7c58849e9f6ad9e0d7a8f8ace2e4d.tar.gz |
Fix the check for maximum mbuf's size needed to send ND6 NA and NS.
It is acceptable that the size can be equal to MCLBYTES. In the later
KAME's code this check has been moved under DIAGNOSTIC ifdef, because
the size of NA and NS is much smaller than MCLBYTES. So, it is safe to
replace the check with KASSERT.
PR: 199304
Discussed with: glebius
MFC after: 1 week
-rw-r--r-- | sys/netinet6/nd6_nbr.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c index 2d319ed..4b160f7 100644 --- a/sys/netinet6/nd6_nbr.c +++ b/sys/netinet6/nd6_nbr.c @@ -417,14 +417,9 @@ nd6_ns_output_fib(struct ifnet *ifp, const struct in6_addr *daddr6, /* estimate the size of message */ maxlen = sizeof(*ip6) + sizeof(*nd_ns); maxlen += (sizeof(struct nd_opt_hdr) + ifp->if_addrlen + 7) & ~7; - if (max_linkhdr + maxlen >= MCLBYTES) { -#ifdef DIAGNOSTIC - printf("%s: max_linkhdr + maxlen >= MCLBYTES " - "(%d + %d > %d)\n", __func__, max_linkhdr, maxlen, - MCLBYTES); -#endif - return; - } + KASSERT(max_linkhdr + maxlen <= MCLBYTES, ( + "%s: max_linkhdr + maxlen > MCLBYTES (%d + %d > %d)", + __func__, max_linkhdr, maxlen, MCLBYTES)); if (max_linkhdr + maxlen > MHLEN) m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); @@ -992,13 +987,9 @@ nd6_na_output_fib(struct ifnet *ifp, const struct in6_addr *daddr6_0, /* estimate the size of message */ maxlen = sizeof(*ip6) + sizeof(*nd_na); maxlen += (sizeof(struct nd_opt_hdr) + ifp->if_addrlen + 7) & ~7; - if (max_linkhdr + maxlen >= MCLBYTES) { -#ifdef DIAGNOSTIC - printf("nd6_na_output: max_linkhdr + maxlen >= MCLBYTES " - "(%d + %d > %d)\n", max_linkhdr, maxlen, MCLBYTES); -#endif - return; - } + KASSERT(max_linkhdr + maxlen <= MCLBYTES, ( + "%s: max_linkhdr + maxlen > MCLBYTES (%d + %d > %d)", + __func__, max_linkhdr, maxlen, MCLBYTES)); if (max_linkhdr + maxlen > MHLEN) m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); |