summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoritojun <itojun@FreeBSD.org>2000-07-12 05:20:41 +0000
committeritojun <itojun@FreeBSD.org>2000-07-12 05:20:41 +0000
commit3b0629faf732df6cf8dd2a9f9f7e5125f988e278 (patch)
tree27ff3982e2672d20db40a28e12b7ba9fc9c8bcba
parentc61df962207863e19ebd768fc8462cb6493094cf (diff)
downloadFreeBSD-src-3b0629faf732df6cf8dd2a9f9f7e5125f988e278.zip
FreeBSD-src-3b0629faf732df6cf8dd2a9f9f7e5125f988e278.tar.gz
correct rtentry reference count in in6_ifloop_request().
if you reconfigure inet6 too much, the reference count can go into negative by mistake. KAME in6.c 1.98 -> 1.99.
-rw-r--r--sys/netinet6/in6.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 7d0e5da..7f06a18 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -1,5 +1,5 @@
/* $FreeBSD$ */
-/* $KAME: in6.c,v 1.87 2000/07/03 15:44:21 itojun Exp $ */
+/* $KAME: in6.c,v 1.99 2000/07/11 17:00:58 jinmei Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -165,7 +165,7 @@ in6_ifloop_request(int cmd, struct ifaddr *ifa)
{
struct sockaddr_in6 lo_sa;
struct sockaddr_in6 all1_sa;
- struct rtentry *nrt = NULL;
+ struct rtentry *nrt = NULL, **nrtp = NULL;
bzero(&lo_sa, sizeof(lo_sa));
bzero(&all1_sa, sizeof(all1_sa));
@@ -180,10 +180,12 @@ in6_ifloop_request(int cmd, struct ifaddr *ifa)
* This request for deletion could fail, e.g. when we remove
* an address right after adding it.
*/
+ if (cmd == RTM_ADD)
+ nrtp = &nrt;
rtrequest(cmd, ifa->ifa_addr,
(struct sockaddr *)&lo_sa,
(struct sockaddr *)&all1_sa,
- RTF_UP|RTF_HOST, &nrt);
+ RTF_UP|RTF_HOST, nrtp);
/*
* Make sure rt_ifa be equal to IFA, the second argument of the
OpenPOWER on IntegriCloud