NetBSD Problem Report #51325

From www@NetBSD.org  Fri Jul  8 15:02:19 2016
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 8284B7A220
	for <gnats-bugs@gnats.NetBSD.org>; Fri,  8 Jul 2016 15:02:19 +0000 (UTC)
Message-Id: <20160708150218.390117AAB5@mollari.NetBSD.org>
Date: Fri,  8 Jul 2016 15:02:18 +0000 (UTC)
From: nonakap@gmail.com
Reply-To: nonakap@gmail.com
To: gnats-bugs@NetBSD.org
Subject: "netstat -ia" causes infinite loop
X-Send-Pr-Version: www-1.0

>Number:         51325
>Category:       kern
>Synopsis:       "netstat -ia" causes infinite loop
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 08 15:05:00 +0000 2016
>Closed-Date:    Wed Jul 13 07:26:47 +0000 2016
>Last-Modified:  Mon Aug 01 02:55:01 +0000 2016
>Originator:     Kimihiro Nonaka
>Release:        HEAD (20160708)
>Organization:
>Environment:
NetBSD koharu.myhome.nonakap.org 7.99.33 NetBSD 7.99.33 (GENERIC) #1: Fri Jul  8 23:09:29 JST 2016  nonaka@build.myhome.nonakap.org:/home/snapshot/NetBSD/HEAD-20160707/obj.NetBSD-amd64/amd64/sys/arch/amd64/compile/GENERIC amd64
>Description:
nonaka@koharu$ netstat -ia
Name  Mtu   Network       Address              Ipkts Ierrs    Opkts Oerrs Colls
iwm0  1500  <Link>        00:15:00:e7:58:d8      768     0     1231     0     0
netstat: kvm_read: Bad address
iwm0  1500  192.168.0.2/3 koharu.myhome.non 
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
netstat: kvm_read: Bad address
                          default           
>How-To-Repeat:
netstat -ia
>Fix:
N/A

>Release-Note:

>Audit-Trail:
From: Ryota Ozaki <ozaki-r@netbsd.org>
To: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>
Cc: kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Mon, 11 Jul 2016 09:37:43 +0900

 On Sat, Jul 9, 2016 at 12:05 AM,  <nonakap@gmail.com> wrote:
 >>Number:         51325
 >>Category:       kern
 >>Synopsis:       "netstat -ia" causes infinite loop
 >>Confidential:   no
 >>Severity:       critical
 >>Priority:       high
 >>Responsible:    kern-bug-people
 >>State:          open
 >>Class:          sw-bug
 >>Submitter-Id:   net
 >>Arrival-Date:   Fri Jul 08 15:05:00 +0000 2016
 >>Originator:     Kimihiro Nonaka
 >>Release:        HEAD (20160708)
 >>Organization:
 >>Environment:
 > NetBSD koharu.myhome.nonakap.org 7.99.33 NetBSD 7.99.33 (GENERIC) #1: Fri Jul  8 23:09:29 JST 2016  nonaka@build.myhome.nonakap.org:/home/snapshot/NetBSD/HEAD-20160707/obj.NetBSD-amd64/amd64/sys/arch/amd64/compile/GENERIC amd64
 >>Description:
 > nonaka@koharu$ netstat -ia
 > Name  Mtu   Network       Address              Ipkts Ierrs    Opkts Oerrs Colls
 > iwm0  1500  <Link>        00:15:00:e7:58:d8      768     0     1231     0     0
 > netstat: kvm_read: Bad address
 > iwm0  1500  192.168.0.2/3 koharu.myhome.non
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 > netstat: kvm_read: Bad address
 >                           default
 >>How-To-Repeat:
 > netstat -ia
 >>Fix:
 > N/A
 >

 It happens due to a member variable added to struct ifaddr:
   http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/net/if.h.diff?r1=1.219&r2=1.220&f=h

 The new variable was added to the end of struct ifaddr to avoid changing
 positions of the other member variables as usual. However, it wan't enough
 because struct ifaddr is embedded at the begging of other data
 structures, such as in_ifaddr and in6_ifaddr, and so member variables of
 the data structures are shifted downward, resulting in that kvm(3)
 fails to read list pointers.

 I have no good idea to fix the issue easily, so I'll revert the change set
 in question.

   ozaki-r

From: "Ryota Ozaki" <ozaki-r@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/51325 CVS commit: src/sys/net
Date: Mon, 11 Jul 2016 02:14:28 +0000

 Module Name:	src
 Committed By:	ozaki-r
 Date:		Mon Jul 11 02:14:27 UTC 2016

 Modified Files:
 	src/sys/net: if.h

 Log Message:
 Revert part of "Switch the address list of intefaces to pslist(9)" (r1.220)

 Reverting the whole change set just messes up many files uselessly
 because changes to them (except for if.h) are proper.

 - Remove ifa_pslist_entry that breaks kvm(3) users (e.g., netstat -ia)
 - Change IFADDR_{READER,WRITER}_* macros to use old IFADDR_* (or just NOP)
   for now

 Fix PR kern/51325


 To generate a diff of this commit:
 cvs rdiff -u -r1.220 -r1.221 src/sys/net/if.h

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

From: Kimihiro Nonaka <nonakap@gmail.com>
To: Ryota Ozaki <ozaki-r@netbsd.org>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>, kern-bug-people@netbsd.org, 
	"gnats-admin@netbsd.org" <gnats-admin@netbsd.org>, "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Wed, 13 Jul 2016 00:41:37 +0900

 I've checked that has been fixed on 7.99.34.
 Thanks!

 nonaka@koharu$ uname -a
 NetBSD koharu.myhome.nonakap.org 7.99.34 NetBSD 7.99.34 (GENERIC) #0:
 Tue Jul 12 22:05:00 JST 2016
 nonaka@build.myhome.nonakap.org:/home/snapshot/NetBSD/HEAD-20160712/obj.NetBSD-amd64/amd64/sys/arch/amd64/compile/GENERIC
 amd64
 nonaka@koharu$ netstat -ia
 Name  Mtu   Network       Address              Ipkts Ierrs    Opkts Oerrs Colls
 iwm0  1500  <Link>        00:15:00:e7:58:d8    84528     0    44705     0     0
 iwm0  1500  192.168.0/24  koharu.myhome.non    84528     0    44705     0     0
 iwm0  1500  fe80::/64     fe80::215:ff:fee7
                           ff02::fb%iwm0
                           ff02::202%iwm0
                           ff01:1::1
                           ff02::2:364a:bc7d
                           ff02::1%iwm0
                           ff02::1:ffe7:58d8    84528     0    44705     0     0
 re0*  1500  <Link>        80:fa:5b:0a:46:60        0     0        0     0     0
 lo0   33624 <Link>                                16     0       16     0     0
 lo0   33624 127/8         localhost               16     0       16     0     0
 lo0   33624 localhost/128 ::1
                           ff02::202%lo0
                           ff01:3::1
                           ff02::2:364a:bc7d
                           ff02::1%lo0
                           ff02::1:ff00:1%lo       16     0       16     0     0
 lo0   33624 fe80::/64     fe80::1                 16     0       16     0     0

 Regards,
 -- 
 Kimihiro Nonaka

State-Changed-From-To: open->closed
State-Changed-By: ozaki-r@NetBSD.org
State-Changed-When: Wed, 13 Jul 2016 07:26:47 +0000
State-Changed-Why:
The report confirmed the fix. Thanks.


From: matthew green <mrg@eterna.com.au>
To: Kimihiro Nonaka <nonakap@gmail.com>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>,
    kern-bug-people@netbsd.org,
    "gnats-admin@netbsd.org" <gnats-admin@netbsd.org>,
    "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>,
    Ryota Ozaki <ozaki-r@netbsd.org>
Subject: re: kern/51325: "netstat -ia" causes infinite loop
Date: Wed, 13 Jul 2016 19:00:14 +1000

 the right way to fix this would be to convert that part
 of netstat to use sysctl on live kernels.  then you can
 change the in-kernel version more sanely without breaking
 apps.  sure, a deaad kernel netstat user will have to
 match kernel/user versions but that's always the case.

 netstat is one of the biggest kvm users left, so it would
 be a great place to start :-)


 .mrg.

From: Ryota Ozaki <ozaki-r@netbsd.org>
To: matthew green <mrg@eterna.com.au>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>, kern-bug-people@netbsd.org, 
	"gnats-admin@netbsd.org" <gnats-admin@netbsd.org>, "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Thu, 14 Jul 2016 11:06:02 +0900

 On Wed, Jul 13, 2016 at 6:00 PM, matthew green <mrg@eterna.com.au> wrote:
 > the right way to fix this would be to convert that part
 > of netstat to use sysctl on live kernels.

 christos@ has done it? :)

 >  then you can
 > change the in-kernel version more sanely without breaking
 > apps.  sure, a deaad kernel netstat user will have to
 > match kernel/user versions but that's always the case.

 If it's allowed, I want to do so because in this case we
 need to do some tricky workaround to make ifaddr lists
 workable for psz/psref maybe introducing some overhead.

   ozaki-r

 >
 > netstat is one of the biggest kvm users left, so it would
 > be a great place to start :-)
 >
 >
 > .mrg.

From: christos@zoulas.com (Christos Zoulas)
To: Ryota Ozaki <ozaki-r@netbsd.org>, matthew green <mrg@eterna.com.au>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>, 
	kern-bug-people@netbsd.org, 
	"gnats-admin@netbsd.org" <gnats-admin@netbsd.org>, 
	"netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Thu, 14 Jul 2016 02:00:57 -0400

 On Jul 14, 11:06am, ozaki-r@netbsd.org (Ryota Ozaki) wrote:
 -- Subject: Re: kern/51325: "netstat -ia" causes infinite loop

 | On Wed, Jul 13, 2016 at 6:00 PM, matthew green <mrg@eterna.com.au> wrote:
 | > the right way to fix this would be to convert that part
 | > of netstat to use sysctl on live kernels.
 | 
 | christos@ has done it? :)

 It is close. I will try to finish it in the next few days. I need to handle
 the multicast stuff.

 | >  then you can
 | > change the in-kernel version more sanely without breaking
 | > apps.  sure, a deaad kernel netstat user will have to
 | > match kernel/user versions but that's always the case.
 | 
 | If it's allowed, I want to do so because in this case we
 | need to do some tricky workaround to make ifaddr lists
 | workable for psz/psref maybe introducing some overhead.
 | 

 Yes, it should be allowed. The policy should be that runtime support
 via sysctl retains compatiibility across kernel bumps, but kmem grovelling
 needs a matching kernel and userland binary so that we don't need to jump
 through hoops to change kernel data structures.

 christos

From: Ryota Ozaki <ozaki-r@netbsd.org>
To: Christos Zoulas <christos@zoulas.com>
Cc: matthew green <mrg@eterna.com.au>, "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>, kern-bug-people@netbsd.org, 
	"gnats-admin@netbsd.org" <gnats-admin@netbsd.org>, "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Thu, 14 Jul 2016 16:30:08 +0900

 On Thu, Jul 14, 2016 at 3:00 PM, Christos Zoulas <christos@zoulas.com> wrote:
 > On Jul 14, 11:06am, ozaki-r@netbsd.org (Ryota Ozaki) wrote:
 > -- Subject: Re: kern/51325: "netstat -ia" causes infinite loop
 >
 > | On Wed, Jul 13, 2016 at 6:00 PM, matthew green <mrg@eterna.com.au> wrote:
 > | > the right way to fix this would be to convert that part
 > | > of netstat to use sysctl on live kernels.
 > |
 > | christos@ has done it? :)
 >
 > It is close. I will try to finish it in the next few days. I need to handle
 > the multicast stuff.

 Thanks!

 >
 > | >  then you can
 > | > change the in-kernel version more sanely without breaking
 > | > apps.  sure, a deaad kernel netstat user will have to
 > | > match kernel/user versions but that's always the case.
 > |
 > | If it's allowed, I want to do so because in this case we
 > | need to do some tricky workaround to make ifaddr lists
 > | workable for psz/psref maybe introducing some overhead.
 > |
 >
 > Yes, it should be allowed. The policy should be that runtime support
 > via sysctl retains compatiibility across kernel bumps, but kmem grovelling
 > needs a matching kernel and userland binary so that we don't need to jump
 > through hoops to change kernel data structures.

 Good to hear! That really helps me :)

   ozaki-r

From: Ryota Ozaki <ozaki-r@netbsd.org>
To: Christos Zoulas <christos@zoulas.com>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>, kern-bug-people@netbsd.org, 
	"gnats-admin@netbsd.org" <gnats-admin@netbsd.org>, "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: kern/51325: "netstat -ia" causes infinite loop
Date: Fri, 15 Jul 2016 17:10:01 +0900

 On Thu, Jul 14, 2016 at 4:30 PM, Ryota Ozaki <ozaki-r@netbsd.org> wrote:
 > On Thu, Jul 14, 2016 at 3:00 PM, Christos Zoulas <christos@zoulas.com> wrote:
 >> On Jul 14, 11:06am, ozaki-r@netbsd.org (Ryota Ozaki) wrote:
 >> -- Subject: Re: kern/51325: "netstat -ia" causes infinite loop
 >>
 >> | On Wed, Jul 13, 2016 at 6:00 PM, matthew green <mrg@eterna.com.au> wrote:
 >> | > the right way to fix this would be to convert that part
 >> | > of netstat to use sysctl on live kernels.
 >> |
 >> | christos@ has done it? :)
 >>
 >> It is close. I will try to finish it in the next few days. I need to handle
 >> the multicast stuff.
 >
 > Thanks!

 I confirmed a new netstat -ia works on a latest kernel w/o kvm(3) :)

 Thanks,
   ozaki-r

From: "Ryota Ozaki" <ozaki-r@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/51325 CVS commit: src/sys/net
Date: Mon, 1 Aug 2016 02:50:03 +0000

 Module Name:	src
 Committed By:	ozaki-r
 Date:		Mon Aug  1 02:50:03 UTC 2016

 Modified Files:
 	src/sys/net: if.h

 Log Message:
 Revert "Revert part of "Switch the address list of intefaces to pslist(9)" (r1.220)"

 netstat now uses sysctl instead of kvm(3) to get address information from
 the kernel. So we can avoid the issue introduced by the reverted commit
 (PR kern/51325) by updating netstat with the latest source code.


 To generate a diff of this commit:
 cvs rdiff -u -r1.222 -r1.223 src/sys/net/if.h

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

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.