diff options
author | itojun <itojun@FreeBSD.org> | 2000-07-12 05:20:41 +0000 |
---|---|---|
committer | itojun <itojun@FreeBSD.org> | 2000-07-12 05:20:41 +0000 |
commit | 3b0629faf732df6cf8dd2a9f9f7e5125f988e278 (patch) | |
tree | 27ff3982e2672d20db40a28e12b7ba9fc9c8bcba /sys/netinet6 | |
parent | c61df962207863e19ebd768fc8462cb6493094cf (diff) | |
download | FreeBSD-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.
Diffstat (limited to 'sys/netinet6')
-rw-r--r-- | sys/netinet6/in6.c | 8 |
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 |