Fix error return codes for ioctls on init/lock state devices.

In revision 223722 we introduced support for driver ioctls on init/lock
state devices. Unfortunately the call to ttydevsw_cioctl() clobbers the
value of the error variable, meaning that in many cases ioctl() will now
return ENOTTY, even though the ioctl() was processed properly.

Reported by:	Boris Samorodov <bsam ipt ru>
Patch by:	jilles@
Approved by:	re@ (kib@)
This commit is contained in:
Ed Schouten 2011-09-12 10:07:21 +00:00
parent 7a2aafc355
commit ca0856d3d1

View File

@ -766,7 +766,7 @@ ttyil_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
struct thread *td)
{
struct tty *tp = dev->si_drv1;
int error = 0;
int error;
tty_lock(tp);
if (tty_gone(tp)) {
@ -777,6 +777,7 @@ ttyil_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
error = ttydevsw_cioctl(tp, dev2unit(dev), cmd, data, td);
if (error != ENOIOCTL)
goto done;
error = 0;
switch (cmd) {
case TIOCGETA: