Date: Fri, 18 Mar 2005 19:10:06 GMT From: Dan Nelson <dnelson@allantgroup.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/78664: truss does not work on 5-STABLE(5.4-PRERELEASE) Message-ID: <200503181910.j2IJA675096826@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/78664; it has been noted by GNATS. From: Dan Nelson <dnelson@allantgroup.com> To: freebsd-gnats-submit@FreeBSD.org, hashiz@tomba.cskk-sv.co.jp, jeffr@FreeBSD.org Cc: Subject: Re: kern/78664: truss does not work on 5-STABLE(5.4-PRERELEASE) Date: Fri, 18 Mar 2005 13:08:01 -0600 In the last episode (Mar 17), Dan Nelson said: > HASHI Hiroaki wrote: > > truss command does not work with below message. > > > > "truss: PIOCBIS: Inappropriate ioctl for device" > > I've narrowed it down to something committed between 02-24 and 02-27, > but can't continue the binary search until tonight. It would be > really nice if this was fixed before 5.4 gets released :) Jeff, it looks like your fdesc-locking MFC inadvertantly broke the PIOCBIS ioctl. Craig Rodrigues' analysis at http://lists.freebsd.org/pipermail/freebsd-current/2004-November/043647.html looks accurate: the extra argument checking in kern/sys_generic.c:ioctl() is failing on a 0-byte IOC_IN ioctl that really should have used _IO(). A quick grep shows some misuse in the other direction. All the ioctls in aac_ioctl.h are _IO(), but many take struct* arguments and should have been _IOR or _IOW. Since the ioctl definition itself is consistent though, it would still pass the checks. I didn't see any ioctls (besides the pioctl.h ones) that would fail the checks, but since you can't guarantee that 3rd-party drivers aren't doing the same thing with private ioctls of their own, I think removing the size checks completely (maybe sending a kernel printf saying "this will fail on 6.x" on first occurance or something) is the best solution. Index: sys_generic.c =================================================================== RCS file: /home/ncvs/src/sys/kern/sys_generic.c,v retrieving revision 1.132.2.3 diff -u -r1.132.2.3 sys_generic.c --- sys_generic.c 27 Feb 2005 02:42:55 -0000 1.132.2.3 +++ sys_generic.c 18 Mar 2005 18:32:53 -0000 @@ -500,9 +503,7 @@ */ size = IOCPARM_LEN(com); if ((size > IOCPARM_MAX) || - ((com & (IOC_VOID | IOC_IN | IOC_OUT)) == 0) || - ((com & IOC_VOID) && size > 0) || - ((com & (IOC_IN | IOC_OUT)) && size == 0)) { + ((com & (IOC_VOID | IOC_IN | IOC_OUT)) == 0)) { fdrop(fp, td); return (ENOTTY); } -- Dan Nelson dnelson@allantgroup.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200503181910.j2IJA675096826>