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:

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-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.