NetBSD/sys/netinet6
dyoung 8068916447 Synchronize access to the ifaddr list by in6_update_ifa() and
in6_control() with splnet()/splx().  I was being a bit paranoid
here.  Following a cursory analysis of the code, this still looked
necessary.  We don't spend a lot of time in these calls, so it
should not be too harmful to suspend network interrupts.

In in6_unlink_ifa(), call in6_delmulti() just once on each multicast
address (in6_multi).  Previously, in6_unlink_ifa() called in6_delmulti()
on each in6_multi until in6_delmulti() removed the in6_multi from
the list and freed its memory.  That's not justified: the multicast
list holds *one* reference.  All other references belong to other
entities.  We must wait to free the memory until the other entities
release their references, to protect against dereferencing a freed
in6_multi.

XXX I need to revisit in6_delmulti(), in6_unlink_ifa(), and friends,
XXX to pry apart the conditions where an in6_multi is removed from
XXX its list and where it is freed.  Following my change, above,
XXX we still risk dereferencing a freed in6_multi.

Prevent in6_update_ifa() and in6_addremloop() from creating dangling
pointers to interfaces in the routing table.  Previously, my NetBSD
tunnel concentrator, which adds and deletes a lot of P2P interfaces
with the same local address, crashed in 8 hours or less when it
dereferenced a dangling pointer to a deleted ifnet.  Now, its uptime
is greater than 3 days.
2006-12-02 20:40:58 +00:00
..
Makefile
ah.h
ah_aesxcbcmac.c
ah_aesxcbcmac.h
ah_core.c
ah_input.c
ah_output.c fix spelling of accommodate; from Zapher. 2006-11-24 19:46:58 +00:00
dest6.c
esp.h
esp_aesctr.c
esp_aesctr.h
esp_core.c
esp_input.c
esp_output.c fix spelling of accommodate; from Zapher. 2006-11-24 19:46:58 +00:00
esp_rijndael.c
esp_rijndael.h
files.ipsec
files.netinet6 move tso-by-software code to their own files. no functional changes. 2006-11-25 18:41:36 +00:00
frag6.c
icmp6.c
in6.c Synchronize access to the ifaddr list by in6_update_ifa() and 2006-12-02 20:40:58 +00:00
in6.h
in6_cksum.c
in6_gif.c
in6_gif.h
in6_ifattach.c
in6_ifattach.h
in6_offload.c move tso-by-software code to their own files. no functional changes. 2006-11-25 18:41:36 +00:00
in6_offload.h move tso-by-software code to their own files. no functional changes. 2006-11-25 18:41:36 +00:00
in6_pcb.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
in6_pcb.h
in6_proto.c
in6_src.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
in6_var.h Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
ip6_etherip.c
ip6_etherip.h
ip6_forward.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
ip6_id.c
ip6_input.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
ip6_mroute.c
ip6_mroute.h
ip6_output.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
ip6_var.h
ip6protosw.h
ipcomp.h
ipcomp_core.c
ipcomp_input.c
ipcomp_output.c fix spelling of accommodate; from Zapher. 2006-11-24 19:46:58 +00:00
ipsec.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
ipsec.h
mld6.c Fix a spelling error. 2006-11-29 03:05:12 +00:00
mld6_var.h
nd6.c fix spelling of accommodate; from Zapher. 2006-11-24 19:46:58 +00:00
nd6.h
nd6_nbr.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
nd6_rtr.c
pim6.h
pim6_var.h
raw_ip6.c Use the queue(3) macros instead of open-coding them. Shorten 2006-12-02 18:59:17 +00:00
raw_ip6.h
route6.c
scope6.c
scope6_var.h
udp6.h
udp6_output.c
udp6_usrreq.c
udp6_var.h