From 06f639fcfac5d9ba245d5a27d66a64bd14960cbf Mon Sep 17 00:00:00 2001 From: csjp Date: Sat, 5 Nov 2005 23:38:08 +0000 Subject: [PATCH] Un-break processing of device major/minor values with fstat -n. We do this by accessing the cdev_priv element of the cdev structure. Looking forward we need a better way to handle this, as this structure shouldn't be frobbed by userspace. Submitted by: Doug Steinwand PR: bin/88203 MFC after: 1 week Discussed with: phk --- usr.bin/fstat/fstat.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/usr.bin/fstat/fstat.c b/usr.bin/fstat/fstat.c index 9c247977215e..b6c09017272d 100644 --- a/usr.bin/fstat/fstat.c +++ b/usr.bin/fstat/fstat.c @@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #undef _KERNEL #include #include @@ -885,11 +886,12 @@ socktrans(struct socket *sock, int i) dev_t dev2udev(struct cdev *dev) { + struct cdev_priv priv; struct cdev si; - if (KVM_READ(dev, &si, sizeof si)) { - /* XXX: FIXME! */ - return 0; + if (KVM_READ(dev, &si, sizeof si) && + KVM_READ(si.si_priv, &priv, sizeof priv)) { + return ((dev_t)priv.cdp_inode); } else { dprintf(stderr, "can't convert cdev *%p to a dev_t\n", dev); return -1;