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. */