From 7ba26d99d89a17797172f8604d309773849e170d Mon Sep 17 00:00:00 2001 From: "David E. O'Brien" Date: Wed, 7 Sep 2005 10:11:49 +0000 Subject: [PATCH] IPv6 was improperly defining its malloc type the same as IPv4 (M_IPMADDR, M_IPMOPTS, M_MRTABLE). Thus we had conflicting instantiations. Create an IPv6-specific type to overcome this. --- sys/netinet6/in6.c | 8 ++++---- sys/netinet6/in6_pcb.c | 2 +- sys/netinet6/in6_var.h | 2 +- sys/netinet6/ip6_mroute.c | 38 +++++++++++++++++++------------------- sys/netinet6/ip6_output.c | 16 ++++++++-------- sys/netinet6/mld6.c | 4 ++-- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index a5a7d046606b..fcf7aed774a5 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -99,7 +99,7 @@ #include -MALLOC_DEFINE(M_IPMADDR, "in6_multi", "internet multicast address"); +MALLOC_DEFINE(M_IP6MADDR, "in6_multi", "internet multicast address"); /* * Definitions of some costant IP6 addresses. @@ -1614,7 +1614,7 @@ in6_joingroup(ifp, addr, errorp) { struct in6_multi_mship *imm; - imm = malloc(sizeof(*imm), M_IPMADDR, M_NOWAIT); + imm = malloc(sizeof(*imm), M_IP6MADDR, M_NOWAIT); if (!imm) { *errorp = ENOBUFS; return NULL; @@ -1622,7 +1622,7 @@ in6_joingroup(ifp, addr, errorp) imm->i6mm_maddr = in6_addmulti(addr, ifp, errorp); if (!imm->i6mm_maddr) { /* *errorp is alrady set */ - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); return NULL; } return imm; @@ -1635,7 +1635,7 @@ in6_leavegroup(imm) if (imm->i6mm_maddr) in6_delmulti(imm->i6mm_maddr); - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); return 0; } diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index 585651285776..ae89aa3c8adb 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -839,7 +839,7 @@ in6_pcbpurgeif0(head, ifp) if (imm->i6mm_maddr->in6m_ifp == ifp) { LIST_REMOVE(imm, i6mm_chain); in6_delmulti(imm->i6mm_maddr); - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); } } } diff --git a/sys/netinet6/in6_var.h b/sys/netinet6/in6_var.h index 34f52fde88ea..148fdbd943d3 100644 --- a/sys/netinet6/in6_var.h +++ b/sys/netinet6/in6_var.h @@ -476,7 +476,7 @@ extern struct in6_addr zeroin6_addr; extern u_char inet6ctlerrmap[]; extern unsigned long in6_maxmtu; #ifdef MALLOC_DECLARE -MALLOC_DECLARE(M_IPMADDR); +MALLOC_DECLARE(M_IP6MADDR); #endif /* MALLOC_DECLARE */ /* diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 7a87d8d2cf97..e51f08f7d010 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -118,7 +118,7 @@ #include -static MALLOC_DEFINE(M_MRTABLE, "mf6c", "multicast forwarding cache entry"); +static MALLOC_DEFINE(M_MRTABLE6, "mf6c", "multicast forwarding cache entry"); #define M_HASCL(m) ((m)->m_flags & M_EXT) @@ -538,12 +538,12 @@ ip6_mrouter_done() struct rtdetq *n = rte->next; m_free(rte->m); - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); rte = n; } frt = rt; rt = rt->mf6c_next; - free(frt, M_MRTABLE); + free(frt, M_MRTABLE6); } } @@ -780,7 +780,7 @@ add_m6fc(mfccp) #ifdef UPCALL_TIMING collate(&(rte->t)); #endif /* UPCALL_TIMING */ - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); rte = n; } rt->mf6c_stall = NULL; @@ -824,7 +824,7 @@ add_m6fc(mfccp) } if (rt == NULL) { /* no upcall, so make a new entry */ - rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE, + rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE6, M_NOWAIT); if (rt == NULL) { splx(s); @@ -923,7 +923,7 @@ del_m6fc(mfccp) } *nptr = rt->mf6c_next; - free(rt, M_MRTABLE); + free(rt, M_MRTABLE6); splx(s); @@ -1048,7 +1048,7 @@ ip6_mforward(ip6, ifp, m) * Allocate mbufs early so that we don't do extra work if we * are just going to fail anyway. */ - rte = (struct rtdetq *)malloc(sizeof(*rte), M_MRTABLE, + rte = (struct rtdetq *)malloc(sizeof(*rte), M_MRTABLE6, M_NOWAIT); if (rte == NULL) { splx(s); @@ -1063,7 +1063,7 @@ ip6_mforward(ip6, ifp, m) (M_HASCL(mb0) || mb0->m_len < sizeof(struct ip6_hdr))) mb0 = m_pullup(mb0, sizeof(struct ip6_hdr)); if (mb0 == NULL) { - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); splx(s); return (ENOBUFS); } @@ -1086,10 +1086,10 @@ ip6_mforward(ip6, ifp, m) #endif /* no upcall, so make a new entry */ - rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE, + rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE6, M_NOWAIT); if (rt == NULL) { - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); m_freem(mb0); splx(s); return (ENOBUFS); @@ -1101,9 +1101,9 @@ ip6_mforward(ip6, ifp, m) mm = m_copy(mb0, 0, sizeof(struct ip6_hdr)); if (mm == NULL) { - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); m_freem(mb0); - free(rt, M_MRTABLE); + free(rt, M_MRTABLE6); splx(s); return (ENOBUFS); } @@ -1131,9 +1131,9 @@ ip6_mforward(ip6, ifp, m) im->im6_mbz = 0; break; default: - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); m_freem(mb0); - free(rt, M_MRTABLE); + free(rt, M_MRTABLE6); splx(s); return (EINVAL); } @@ -1164,9 +1164,9 @@ ip6_mforward(ip6, ifp, m) log(LOG_WARNING, "ip6_mforward: ip6_mrouter " "socket queue full\n"); mrt6stat.mrt6s_upq_sockfull++; - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); m_freem(mb0); - free(rt, M_MRTABLE); + free(rt, M_MRTABLE6); splx(s); return (ENOBUFS); } @@ -1198,7 +1198,7 @@ ip6_mforward(ip6, ifp, m) for (p = &rt->mf6c_stall; *p != NULL; p = &(*p)->next) if (++npkts > MAX_UPQ6) { mrt6stat.mrt6s_upq_ovflw++; - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); m_freem(mb0); splx(s); return (0); @@ -1262,14 +1262,14 @@ expire_upcalls(unused) do { struct rtdetq *n = rte->next; m_freem(rte->m); - free(rte, M_MRTABLE); + free(rte, M_MRTABLE6); rte = n; } while (rte != NULL); mrt6stat.mrt6s_cache_cleanups++; n6expire[i]--; *nptr = mfc->mf6c_next; - free(mfc, M_MRTABLE); + free(mfc, M_MRTABLE6); } else { nptr = &mfc->mf6c_next; } diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c index 39ea60226181..5bdef30eec43 100644 --- a/sys/netinet6/ip6_output.c +++ b/sys/netinet6/ip6_output.c @@ -113,7 +113,7 @@ #include #include -static MALLOC_DEFINE(M_IPMOPTS, "ip6_moptions", "internet multicast options"); +static MALLOC_DEFINE(M_IP6MOPTS, "ip6_moptions", "internet multicast options"); struct ip6_exthdrs { struct mbuf *ip6e_ip6; @@ -2595,7 +2595,7 @@ ip6_setmoptions(optname, im6op, m) * allocate one and initialize to default values. */ im6o = (struct ip6_moptions *) - malloc(sizeof(*im6o), M_IPMOPTS, M_WAITOK); + malloc(sizeof(*im6o), M_IP6MOPTS, M_WAITOK); if (im6o == NULL) return (ENOBUFS); @@ -2764,14 +2764,14 @@ ip6_setmoptions(optname, im6op, m) * Everything looks good; add a new record to the multicast * address list for the given interface. */ - imm = malloc(sizeof(*imm), M_IPMADDR, M_WAITOK); + imm = malloc(sizeof(*imm), M_IP6MADDR, M_WAITOK); if (imm == NULL) { error = ENOBUFS; break; } if ((imm->i6mm_maddr = in6_addmulti(&mreq->ipv6mr_multiaddr, ifp, &error)) == NULL) { - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); break; } LIST_INSERT_HEAD(&im6o->im6o_memberships, imm, i6mm_chain); @@ -2861,7 +2861,7 @@ ip6_setmoptions(optname, im6op, m) */ LIST_REMOVE(imm, i6mm_chain); in6_delmulti(imm->i6mm_maddr); - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); break; default: @@ -2876,7 +2876,7 @@ ip6_setmoptions(optname, im6op, m) im6o->im6o_multicast_hlim == ip6_defmcasthlim && im6o->im6o_multicast_loop == IPV6_DEFAULT_MULTICAST_LOOP && im6o->im6o_memberships.lh_first == NULL) { - free(*im6op, M_IPMOPTS); + free(*im6op, M_IP6MOPTS); *im6op = NULL; } @@ -2946,9 +2946,9 @@ ip6_freemoptions(im6o) LIST_REMOVE(imm, i6mm_chain); if (imm->i6mm_maddr) in6_delmulti(imm->i6mm_maddr); - free(imm, M_IPMADDR); + free(imm, M_IP6MADDR); } - free(im6o, M_IPMOPTS); + free(im6o, M_IP6MOPTS); } /* diff --git a/sys/netinet6/mld6.c b/sys/netinet6/mld6.c index 35236da2acd5..f5194b787549 100644 --- a/sys/netinet6/mld6.c +++ b/sys/netinet6/mld6.c @@ -530,7 +530,7 @@ in6_addmulti(maddr6, ifp, errorp) /* XXX - if_addmulti uses M_WAITOK. Can this really be called at interrupt time? If so, need to fix if_addmulti. XXX */ - in6m = (struct in6_multi *)malloc(sizeof(*in6m), M_IPMADDR, M_NOWAIT); + in6m = (struct in6_multi *)malloc(sizeof(*in6m), M_IP6MADDR, M_NOWAIT); if (in6m == NULL) { splx(s); return (NULL); @@ -571,7 +571,7 @@ in6_delmulti(in6m) mld6_stop_listening(in6m); ifma->ifma_protospec = NULL; LIST_REMOVE(in6m, in6m_entry); - free(in6m, M_IPMADDR); + free(in6m, M_IP6MADDR); } /* XXX - should be separate API for when we have an ifma? */ if_delmulti(ifma->ifma_ifp, ifma->ifma_addr);