Module Name: src Committed By: ozaki-r Date: Thu Nov 10 03:32:04 UTC 2016
Modified Files: src/sys/arch/x86/x86: vmt.c Log Message: Fix a breakout of loops As the comment "find first available ipv4 address" indicates, if an IP address is found, we need to leave the two nested loops, a loop for an interface list and a loop for IP addresses of an interface. However, the original code broke away only from the inner loop. The original (wrong) behavior was non-critical, which just returned a non-first IP address. Unfortunately, after applying psref, the behavior may call psref_acquire twice to a target with the same psref object, resulting in a kernel panic eventually. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/x86/x86/vmt.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/arch/x86/x86/vmt.c diff -u src/sys/arch/x86/x86/vmt.c:1.14 src/sys/arch/x86/x86/vmt.c:1.15 --- src/sys/arch/x86/x86/vmt.c:1.14 Mon Aug 1 03:15:30 2016 +++ src/sys/arch/x86/x86/vmt.c Thu Nov 10 03:32:04 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vmt.c,v 1.14 2016/08/01 03:15:30 ozaki-r Exp $ */ +/* $NetBSD: vmt.c,v 1.15 2016/11/10 03:32:04 ozaki-r Exp $ */ /* $OpenBSD: vmt.c,v 1.11 2011/01/27 21:29:25 dtucker Exp $ */ /* @@ -825,9 +825,10 @@ vmt_tclo_tick(void *xarg) guest_ip = satosin(iface_addr->ifa_addr); ifa_acquire(iface_addr, &psref); - break; + goto got; } } + got: pserialize_read_exit(s); if (guest_ip != NULL) {