Module Name:    src
Committed By:   knakahara
Date:           Mon Sep 30 10:22:14 UTC 2019

Modified Files:
        src/sys/net: route.c

Log Message:
Fix a ifa_release() leak for a specific struct rt_addrinfo.

ok by ozaki-r@n.o


To generate a diff of this commit:
cvs rdiff -u -r1.223 -r1.224 src/sys/net/route.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/route.c
diff -u src/sys/net/route.c:1.223 src/sys/net/route.c:1.224
--- src/sys/net/route.c:1.223	Wed Sep 25 09:53:37 2019
+++ src/sys/net/route.c	Mon Sep 30 10:22:14 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: route.c,v 1.223 2019/09/25 09:53:37 ozaki-r Exp $	*/
+/*	$NetBSD: route.c,v 1.224 2019/09/30 10:22:14 knakahara Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.223 2019/09/25 09:53:37 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.224 2019/09/30 10:22:14 knakahara Exp $");
 
 #include <sys/param.h>
 #ifdef RTFLUSH_DEBUG
@@ -1400,8 +1400,11 @@ rt_update_get_ifa(const struct rt_addrin
 		*ifp = ifa->ifa_ifp;
 		if_acquire(*ifp, psref_ifp);
 		if (info->rti_info[RTAX_IFA] == NULL &&
-		    info->rti_info[RTAX_GATEWAY] == NULL)
+		    info->rti_info[RTAX_GATEWAY] == NULL) {
+			ifa_release(ifa, psref);
+			ifa = NULL;
 			goto next;
+		}
 		ifa_release(ifa, psref);
 		if (info->rti_info[RTAX_IFA] == NULL) {
 			/* route change <dst> <gw> -ifp <if> */

Reply via email to