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:
(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.