NetBSD Problem Report #48925

From mm_lists@pulsar-zone.net  Thu Jun 19 08:23:41 2014
Return-Path: <mm_lists@pulsar-zone.net>
Received: from mail.netbsd.org (mail.netbsd.org [149.20.53.66])
	(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 8B61FA64F0
	for <gnats-bugs@gnats.NetBSD.org>; Thu, 19 Jun 2014 08:23:41 +0000 (UTC)
Message-Id: <201406190823.s5J8Ncd0020288@ginseng.pulsar-zone.net>
Date: Thu, 19 Jun 2014 04:23:37 -0400
From: Matthew Mondor <mm_lists@pulsar-zone.net>
To: gnats-bugs@gnats.NetBSD.org
Subject: netbsd-6 fstat(1) pmisc descriptor number mismatch

>Number:         48925
>Category:       bin
>Synopsis:       netbsd-6 fstat(1) pmisc descriptor number mismatch
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jun 19 08:25:00 +0000 2014
>Originator:     Matthew Mondor
>Release:        NetBSD 6.1_STABLE
>Organization:
>Environment:
System: NetBSD ninja.xisop 6.1_STABLE NetBSD 6.1_STABLE (GENERIC_MM) #3: Mon Jul 1 19:08:46 EDT 2013 root@ninja.xisop:/usr/obj/sys/arch/amd64/compile/GENERIC_MM amd64
Architecture: x86_64
Machine: amd64
>Description:

As can be seen below, some file descriptor types (handled by pmisc())
are reported with a wrong FD number.

# fstat -p 14403
USER     CMD          PID   FD MOUNT       INUM MODE         SZ|DV R/W
mmondor  tms-server 14403   wd /              2 drwxr-xr-x    1024 r 
mmondor  tms-server 14403    0 /         873100 crw-rw-rw-    null rw
mmondor  tms-server 14403    1 /         873100 crw-rw-rw-    null rw
mmondor  tms-server 14403    2 /         873100 crw-rw-rw-    null rw
mmondor  tms-server 14403    3* unix dgram  <-> fffffe810ede6f08
mmondor  tms-server 14403    4* kqueue pending 0
mmondor  tms-server 14403    5* internet stream tcp *:7777
mmondor  tms-server 14403    5* misc 0xfffffe810f768fa8
mmondor  tms-server 14403    7* internet stream tcp 192.168.1.15:64000 <-> 192.168.1.15:7777

[...]

www      httpd        314    5* crypto 0xc378cdd4
www      httpd        314    5* crypto 0xc378cd6c
www      httpd        314    5* crypto 0xc378cd04
www      httpd        314    5* crypto 0xc378cc9c
www      httpd        314    5* crypto 0xc378cc34
www      httpd        314    5* crypto 0xc378cbcc
www      httpd        314    5* crypto 0xc378cb64
www      httpd        314    5* crypto 0xc378cafc
www      httpd        314    5* crypto 0xc378ca94
www      httpd        314   61* pipe 0xc4372d88 <- 0xc3aba304 rn
www      httpd        314   62* pipe 0xc3aba304 -> 0xc4372d88 w
www      httpd        314   63 /         349490 -rw-r-----  784855 w 
www      httpd        314    4* kqueue pending 1
www      httpd        314   65* pipe 0xc4377cc8 -> 0xc4372848 w
www      httpd        314   67* unix stream  <-> c86d4504
www      httpd        314   68* unix stream  <-> c7b9b1e4

>How-To-Repeat:

Use fstat on processes using kqueue, crypto, misc, etc

>Fix:

The attached diff appears to fix it for me.

--MP_/xAK7ceaI/SWkG6Lq6fW8H_1
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=netbsd-6-fstat.diff

Index: usr.bin/fstat/fstat.c
===================================================================
RCS file: /data/rsync/netbsd-cvs/src/usr.bin/fstat/fstat.c,v
retrieving revision 1.95.4.1
diff -u -p -r1.95.4.1 fstat.c
--- usr.bin/fstat/fstat.c	2 Apr 2012 18:22:03 -0000	1.95.4.1
+++ usr.bin/fstat/fstat.c	19 Jun 2014 08:03:04 -0000
@@ -170,7 +170,7 @@ static const char *inet6_addrstr(char *,
 #endif
 static const char *at_addrstr(char *, size_t, const struct sockaddr_at *);
 static void	socktrans(struct socket *, int);
-static void	misctrans(struct file *);
+static void	misctrans(int fd, struct file *);
 static int	ufs_filestat(struct vnode *, struct filestat *);
 static void	usage(void) __dead;
 static const char   *vfilestat(struct vnode *, struct filestat *);
@@ -424,7 +424,7 @@ ftrans(fdfile_t *fp, int i)
 	case DTYPE_MQUEUE:
 	case DTYPE_SEM:
 		if (checkfile == 0)
-			misctrans(&file);
+			misctrans(i, &file);
 		break;
 	default:
 		dprintf("unknown file type %d for file %d of pid %d",
@@ -1081,10 +1081,10 @@ bad:
 }

 static void
-misctrans(struct file *file)
+misctrans(int fd, struct file *file)
 {

-	PREFIX((int)file->f_type);
+	PREFIX(fd);
 	pmisc(file, dtypes[file->f_type]);
 }


--MP_/xAK7ceaI/SWkG6Lq6fW8H_1--

>Unformatted:
 --MP_/xAK7ceaI/SWkG6Lq6fW8H_1
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline

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.