Module Name: src Committed By: christos Date: Mon Jan 2 23:00:25 UTC 2017
Modified Files: src/sys/netinet: in.c in_var.h Log Message: - You can't just call the pfil hook to remove an address before an address is removed! Hold a reference instead, remove it, and then free it. - GC iatoifa() To generate a diff of this commit: cvs rdiff -u -r1.194 -r1.195 src/sys/netinet/in.c cvs rdiff -u -r1.90 -r1.91 src/sys/netinet/in_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/in.c diff -u src/sys/netinet/in.c:1.194 src/sys/netinet/in.c:1.195 --- src/sys/netinet/in.c:1.194 Sat Dec 31 04:41:05 2016 +++ src/sys/netinet/in.c Mon Jan 2 18:00:25 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: in.c,v 1.194 2016/12/31 09:41:05 ryo Exp $ */ +/* $NetBSD: in.c,v 1.195 2017/01/02 23:00:25 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.194 2016/12/31 09:41:05 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.195 2017/01/02 23:00:25 christos Exp $"); #include "arp.h" @@ -668,9 +668,11 @@ in_control0(struct socket *so, u_long cm break; case SIOCDIFADDR: - pfil_run_addrhooks(if_pfil, cmd, iatoifa(ia)); ia4_release(ia, &psref); + ifaref(&ia->ia_ifa); in_purgeaddr(&ia->ia_ifa); + pfil_run_addrhooks(if_pfil, cmd, &ia->ia_ifa); + ifafree(&ia->ia_ifa); ia = NULL; break; @@ -705,7 +707,7 @@ in_control0(struct socket *so, u_long cm if (error == 0) { if (run_hook) - pfil_run_addrhooks(if_pfil, cmd, iatoifa(ia)); + pfil_run_addrhooks(if_pfil, cmd, &ia->ia_ifa); } else if (newifaddr) { KASSERT(ia != NULL); in_purgeaddr(&ia->ia_ifa); Index: src/sys/netinet/in_var.h diff -u src/sys/netinet/in_var.h:1.90 src/sys/netinet/in_var.h:1.91 --- src/sys/netinet/in_var.h:1.90 Tue Dec 6 02:01:47 2016 +++ src/sys/netinet/in_var.h Mon Jan 2 18:00:25 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: in_var.h,v 1.90 2016/12/06 07:01:47 knakahara Exp $ */ +/* $NetBSD: in_var.h,v 1.91 2017/01/02 23:00:25 christos Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -148,8 +148,6 @@ struct in_aliasreq { */ #define IA_SIN(ia) (&(((struct in_ifaddr *)(ia))->ia_addr)) -#define iatoifa(ia) (struct ifaddr *)(ia) - #ifdef _KERNEL /* Note: 61, 127, 251, 509, 1021, 2039 are good. */