NetBSD Problem Report #37550
From mmondor@pulsar-zone.net Sun Dec 16 16:39:34 2007
Return-Path: <mmondor@pulsar-zone.net>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by narn.NetBSD.org (Postfix) with ESMTP id 2620763B852
for <gnats-bugs@gnats.NetBSD.org>; Sun, 16 Dec 2007 16:39:34 +0000 (UTC)
Message-Id: <200712161639.lBGGdU15008565@ginseng.xisop>
Date: Sun, 16 Dec 2007 11:39:30 -0500 (EST)
From: mmondor@pulsar-zone.net
Reply-To: mmondor@pulsar-zone.net
To: gnats-bugs@NetBSD.org
Subject: fstat(1) not reporting open descriptors properly
X-Send-Pr-Version: 3.95
>Number: 37550
>Category: kern
>Synopsis: fstat(1) not reporting open descriptors properly
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Dec 16 16:40:00 +0000 2007
>Closed-Date: Sun Jan 27 00:50:13 +0000 2008
>Last-Modified: Sat Apr 11 15:50:07 +0000 2009
>Originator: Matthew Mondor
>Release: NetBSD 4.99.42
>Organization:
>Environment:
System: NetBSD sat.xisop 4.99.42 NetBSD 4.99.42 (GENERIC_LAPTOP_MM) #1: Fri Dec 14 00:35:33 EST 2007 root@sat.xisop:/usr/obj/sys/arch/i386/compile/GENERIC_LAPTOP_MM i386
Architecture: i386
Machine: i386
>Description:
The fstat(1) utility appears to not show all descriptors while
our procfs's /<proc>/fd/ directory can show them. The descriptors
which it omits in my case are opened instances of tap(4) via
the /dev/tap cloning device. Since pts(4) descriptors are shown,
it might possibly be specific to tap(4) or a few other cloning
devices, this has to be further investigated.
Example:
--- (pts/6) root@sat.xisop # ps axl | grep tap-bridge
1 4489 5048 0 90 -10 752 952 select S< ? 0:05.02 tap-bridge -i fxp0 -a 192.168.1.12 -n 255.255.255.0
0 5048 1 169 90 -10 752 584 pause I<s ? 0:00.00 tap-bridge -i fxp0 -a 192.168.1.12 -n 255.255.255.0
1000 14825 564 0 85 0 1796 2636 select I+ ttyp2 0:03.29 vim tap-bridge.c
--- (pts/6) root@sat.xisop # fstat -p 4489
USER CMD PID FD MOUNT INUM MODE SZ|DV R/W
daemon tap-bridge 4489 wd / 2 drwxr-xr-x 512 r
daemon tap-bridge 4489 0 / 493931 crw-rw-rw- 1251,292468 rw
daemon tap-bridge 4489 1 / 493931 crw-rw-rw- 1251,292468 rw
daemon tap-bridge 4489 2 /dev/pts 15 crw--w---- ttyp6 rw
daemon tap-bridge 4489 3* internet dgram udp c0d69618 *:0
daemon tap-bridge 4489 7 / 757404 prw-rw---- 0 w
--- (pts/6) root@sat.xisop # fstat -p 5048
USER CMD PID FD MOUNT INUM MODE SZ|DV R/W
root tap-bridge 5048 wd / 2 drwxr-xr-x 512 r
root tap-bridge 5048 0 / 493931 crw-rw-rw- 1251,292468 rw
root tap-bridge 5048 1 / 493931 crw-rw-rw- 1251,292468 rw
root tap-bridge 5048 2 /dev/pts 15 crw--w---- ttyp6 rw
root tap-bridge 5048 3* internet dgram udp c0d69618 *:0
--- (pts/6) root@sat.xisop # ls -l /emul/linux/proc/4489/fd/
total 0
crw-rw-rw- 1 root wheel 2, 2 Dec 16 03:36 0
crw-rw-rw- 1 root wheel 2, 2 Dec 16 03:36 1
crw--w---- 1 mmondor tty 5, 6 Dec 16 11:08 2
srw------- 1 root wheel 0 Dec 16 11:08 3
lr-xr-xr-x 1 root wheel 0 Dec 16 11:08 4 -> [misc]
lr-xr-xr-x 1 root wheel 0 Dec 16 11:08 5 -> [misc]
prw-rw---- 1 root daemon 0 Dec 16 11:08 7
--- (pts/6) root@sat.xisop # ls -l /emul/linux/proc/5048/fd/
total 0
crw-rw-rw- 1 root wheel 2, 2 Dec 16 03:36 0
crw-rw-rw- 1 root wheel 2, 2 Dec 16 03:36 1
crw--w---- 1 mmondor tty 5, 6 Dec 16 11:08 2
srw------- 1 root wheel 0 Dec 16 11:08 3
lr-xr-xr-x 1 root wheel 0 Dec 16 11:08 4 -> [misc]
lr-xr-xr-x 1 root wheel 0 Dec 16 11:08 5 -> [misc]
--- (pts/6) root@sat.xisop #
>How-To-Repeat:
Write a small program opening /dev/tap and look at its descriptors
via fstat(1) and procfs.
The code with which I first noticed this is an experimental userland
layer 2 bridge called tap-bridge which may be found at:
http://cvs.pulsar-zone.net/cgi-bin/cvsweb.cgi/mmondor/tests/tap/
(cvs -z3 -d:pserver:anoncvs@cvs.pulsar-zone.net:/cvsroot \
co mmondor/tests/tap mmondor/mmsoftware/mmlib)
cd mmondor/tests/tap && gmake
su
gmake install && mkfifo /tmp/tap-filter.log && \
chgrp daemon /tmp/tap-filter.log && \
chmod g+w /tmp/tap-filter.log
In another tty cat /tmp/tap-filter.log or whatever to read from fifo
which the tap-logger.so module will write to.
ifconfig <ethernetiface> 0.0.0.0
/etc/rc.d/network stop
tap-bridge -i <ethernetiface> -a <lanipaddress> -n <netmask>
where <lanipaddress> and <netmask> would normally be the values set
to <ethernetiface>, but these will be set on a tap(4), bridged
through another tap(4) in userland software, which in turn will be
bridged to <ethernetiface> via bridge(4) (automatically created and
configured). Set default route if necessary with:
route add default <gatewayipaddress>
To exit and restore original configuration:
kill $(cat /var/run/tap-bridge.pid)
/etc/rc.d/network restart
>Fix:
>Release-Note:
>Audit-Trail:
From: "Matthew Mondor" <mmondor@pulsar-zone.net>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/37550: stat(1) not reporting open descriptors properly
Date: Sat, 26 Jan 2008 13:01:51 -0500 (EST)
After noticing that tap(4) uses fdclone(9), I checked for another
device also using it. bpf(4) does, and also doesn't show via
fstat(2). I suspect fdclone(9) to be the culprit; This probably
should be moved to the kern category.
--
Matthew Mondor
Responsible-Changed-From-To: bin-bug-people->kern-bug-people
Responsible-Changed-By: dholland@narn.netbsd.org
Responsible-Changed-When: Sat, 26 Jan 2008 19:21:47 +0000
Responsible-Changed-Why:
looks reasonable to me.
From: "Matthew Mondor" <mmondor@pulsar-zone.net>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/37550: stat(1) not reporting open descriptors properly
Date: Sat, 26 Jan 2008 15:57:15 -0500 (EST)
Also see kern/37878.
--
Matthew Mondor
State-Changed-From-To: open->closed
State-Changed-By: dholland@narn.netbsd.org
State-Changed-When: Sun, 27 Jan 2008 00:50:13 +0000
State-Changed-Why:
superseded by 37878.
From: Christos Zoulas <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/37550 CVS commit: src/sys
Date: Sat, 11 Apr 2009 11:47:34 -0400
Module Name: src
Committed By: christos
Date: Sat Apr 11 15:47:34 UTC 2009
Modified Files:
src/sys/dev/dmover: dmover_io.c
src/sys/dev/putter: putter.c
src/sys/kern: kern_drvctl.c sys_mqueue.c
src/sys/net: bpf.c bpfdesc.h if_tap.c
src/sys/opencrypto: cryptodev.c
src/sys/sys: mqueue.h
Log Message:
Fix PR/37878 and PR/37550: Provide stat(2) for all devices and don't use
fbadop_stat.
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sys/dev/dmover/dmover_io.c
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/putter/putter.c
cvs rdiff -u -r1.24 -r1.25 src/sys/kern/kern_drvctl.c
cvs rdiff -u -r1.14 -r1.15 src/sys/kern/sys_mqueue.c
cvs rdiff -u -r1.144 -r1.145 src/sys/net/bpf.c
cvs rdiff -u -r1.29 -r1.30 src/sys/net/bpfdesc.h
cvs rdiff -u -r1.55 -r1.56 src/sys/net/if_tap.c
cvs rdiff -u -r1.47 -r1.48 src/sys/opencrypto/cryptodev.c
cvs rdiff -u -r1.6 -r1.7 src/sys/sys/mqueue.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-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.