Module Name: src Committed By: martin Date: Thu Nov 30 15:57:37 UTC 2017
Modified Files: src/sys/compat/common [netbsd-8]: uipc_syscalls_40.c src/sys/compat/linux/common [netbsd-8]: linux_socket.c src/sys/compat/linux32/common [netbsd-8]: linux32_socket.c src/sys/net [netbsd-8]: if.c if_spppsubr.c src/sys/netinet [netbsd-8]: ip_carp.c src/sys/netinet6 [netbsd-8]: in6.c src/sys/netipsec [netbsd-8]: key.c Log Message: Pull up following revision(s) (requested by ozaki-r in ticket #407): sys/compat/linux32/common/linux32_socket.c: revision 1.28 sys/net/if.c: revision 1.400 sys/netipsec/key.c: revision 1.243 sys/compat/linux/common/linux_socket.c: revision 1.139 sys/netinet/ip_carp.c: revision 1.93 sys/netinet6/in6.c: revision 1.252 sys/netinet6/in6.c: revision 1.253 sys/netinet6/in6.c: revision 1.254 sys/net/if_spppsubr.c: revision 1.173 sys/net/if_spppsubr.c: revision 1.174 sys/compat/common/uipc_syscalls_40.c: revision 1.14 Protect IFADDR_READER_FOREACH and obtained ifa with psz/psref Fix usage of FOREACH macro key_sad.lock is held there so SAVLIST_WRITER_FOREACH is enough. Protect IFADDR_READER_FOREACH and obtained ifa with psz/psref Protect IFADDR_READER_FOREACH and obtained ifa with psz/psref (more) Fix and make consistent of usages of psz/psref in ifconf variants Remove unnecessary goto because there is no cleanup code to share (NFC) Tweak a condition; we don't need to care ifacount to be negative Fix a race condition of in6_ifinit in6_ifinit checks the number of IPv6 addresses on a given interface and if it's zero (i.e., an IPv6 address being assigned to the interface is the first one), call if_addr_init. However, the actual assignment of the address (ifa_insert) is out of in6_ifinit. The check and the assignment must be done atomically. Fix it by holding in6_ifaddr_lock during in6_ifinit and ifa_insert. And also add missing pserialize to IFADDR_READER_FOREACH. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.13.6.1 src/sys/compat/common/uipc_syscalls_40.c cvs rdiff -u -r1.138 -r1.138.6.1 src/sys/compat/linux/common/linux_socket.c cvs rdiff -u -r1.27 -r1.27.6.1 src/sys/compat/linux32/common/linux32_socket.c cvs rdiff -u -r1.394.2.1 -r1.394.2.2 src/sys/net/if.c cvs rdiff -u -r1.169.6.1 -r1.169.6.2 src/sys/net/if_spppsubr.c cvs rdiff -u -r1.90 -r1.90.2.1 src/sys/netinet/ip_carp.c cvs rdiff -u -r1.245.2.2 -r1.245.2.3 src/sys/netinet6/in6.c cvs rdiff -u -r1.163.2.3 -r1.163.2.4 src/sys/netipsec/key.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.