pciconf -lv - /dev/pci error
John Baldwin
jhb at FreeBSD.org
Wed Dec 31 11:02:04 PST 2003
On 31-Dec-2003 Robert Watson wrote:
>
> 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 at snow 09:12:42 root]# pciconf -lv
>> pciconf: /dev/pci: Operation not permitted
>>
>> [root at 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...
History is in PR 32677. I do think your patch might be ok if it
only applies to the -l case. If so, then it should probably be committed
and MFC'd (along with the kernel pci_user.c change) so the PR can be
closed.
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
More information about the freebsd-hackers
mailing list