From owner-freebsd-hackers@FreeBSD.ORG Wed Dec 31 10:02:15 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 465EE16A4CE for ; Wed, 31 Dec 2003 10:02:15 -0800 (PST) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4C2D743D46 for ; Wed, 31 Dec 2003 10:02:11 -0800 (PST) (envelope-from robert@fledge.watson.org) Received: from fledge.watson.org (localhost [127.0.0.1]) by fledge.watson.org (8.12.10/8.12.10) with ESMTP id hBVI17Ud056843; Wed, 31 Dec 2003 13:01:07 -0500 (EST) (envelope-from robert@fledge.watson.org) Received: from localhost (robert@localhost)hBVI16lq056840; Wed, 31 Dec 2003 13:01:06 -0500 (EST) (envelope-from robert@fledge.watson.org) Date: Wed, 31 Dec 2003 13:01:06 -0500 (EST) From: Robert Watson X-Sender: robert@fledge.watson.org To: William Michael Grim In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: hackers@freebsd.org Subject: Re: pciconf -lv - /dev/pci error X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Dec 2003 18:02:15 -0000 On Wed, 31 Dec 2003, William Michael Grim wrote: > I have 5.1-RELEASE installed on my system, and I've never needed to do a > "pciconf -lv" to probe the system before. However, I tried doing it > earlier today after logging in through SSH and doing "su -" to become > superuser. I received this error: > > [root@snow 09:12:42 root]# pciconf -lv > pciconf: /dev/pci: Operation not permitted > > [root@snow 09:15:41 root]# ls -l /dev/pci > crw-r--r-- 1 root wheel 251, 0 Nov 2 05:09 /dev/pci > > So, as you can see, the permissions are correct. Perhaps I don't have > something compiled into my kernel? I can attach a dmesg and kernel > config if it's necessary. pciconf -lv appears to cause pciconf to open /dev/pci writable: 731 pciconf CALL open(0x8049a55,0x2,0) 731 pciconf NAMI "/dev/pci" 731 pciconf RET open -1 errno 13 Permission denied And, of course, it's not writable by non-root. The attached patch causes pciconf to open /dev/pci read-only when listing devices (apply to usr.sbin/pciconf/pciconf.c): Index: pciconf.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pciconf/pciconf.c,v retrieving revision 1.19 diff -u -r1.19 pciconf.c --- pciconf.c 20 Jun 2003 23:59:25 -0000 1.19 +++ pciconf.c 31 Dec 2003 17:58:45 -0000 @@ -165,7 +165,7 @@ if (verbose) load_vendors(); - fd = open(_PATH_DEVPCI, O_RDWR, 0); + fd = open(_PATH_DEVPCI, O_RDONLY, 0); if (fd < 0) err(1, "%s", _PATH_DEVPCI); The pci_user.c code in the kernel requires that the caller hold a writable file descriptor for most of the ioctls; the exception is PCIOCGETCONF, which is the only ioctl pciconf's list_devs() uses. We can probably just go ahead and commit this patch, I think. The reason a check was added to the kernel pci ioctl code is that unaligned writes to /dev/pci can cause faults, I believe... Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Senior Research Scientist, McAfee Research