Merge branch 'work.tty-ioctl' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull tty ioctl updates from Al Viro: "This is the compat_ioctl work related to tty ioctls. Quite a bit of dead code taken out, all tty-related stuff gone from fs/compat_ioctl.c. A bunch of compat bugs fixed - some still remain, but all more or less generic tty-related ioctls should be covered (remaining issues are in things like driver-private ioctls in a pcmcia serial card driver not getting properly handled in 32bit processes on 64bit host, etc)" * 'work.tty-ioctl' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (53 commits) kill TIOCSERGSTRUCT change semantics of ldisc ->compat_ioctl() kill TIOCSER[SG]WILD synclink_gt(): fix compat_ioctl() pty: fix compat ioctls compat_ioctl - kill keyboard ioctl handling gigaset: add ->compat_ioctl() vt_compat_ioctl(): clean up, use compat_ptr() properly gigaset: don't try to printk userland buffer contents dgnc: don't bother with (empty) stub for TCXONC dgnc: leave TIOC[GS]SOFTCAR to ldisc remove fallback to drivers for TIOCGICOUNT dgnc: break-related ioctls won't reach ->ioctl() kill the rest of tty COMPAT_IOCTL() entries dgnc: TIOCM... won't reach ->ioctl() isdn_tty: TCSBRK{,P} won't reach ->ioctl() kill capinc_tty_ioctl() take compat TIOC[SG]SERIAL treatment into tty_compat_ioctl() synclink: reduce pointless checks in ->ioctl() complete ->[sg]et_serial() switchover ...
This commit is contained in:
@@ -1175,17 +1175,13 @@ long vt_compat_ioctl(struct tty_struct *tty,
|
||||
{
|
||||
struct vc_data *vc = tty->driver_data;
|
||||
struct console_font_op op; /* used in multiple places here */
|
||||
unsigned int console;
|
||||
void __user *up = (void __user *)arg;
|
||||
unsigned int console = vc->vc_num;
|
||||
void __user *up = compat_ptr(arg);
|
||||
int perm;
|
||||
int ret = 0;
|
||||
|
||||
console = vc->vc_num;
|
||||
|
||||
if (!vc_cons_allocated(console)) { /* impossible? */
|
||||
ret = -ENOIOCTLCMD;
|
||||
goto out;
|
||||
}
|
||||
if (!vc_cons_allocated(console)) /* impossible? */
|
||||
return -ENOIOCTLCMD;
|
||||
|
||||
/*
|
||||
* To have permissions to do most of the vt ioctls, we either have
|
||||
@@ -1201,17 +1197,14 @@ long vt_compat_ioctl(struct tty_struct *tty,
|
||||
*/
|
||||
case PIO_FONTX:
|
||||
case GIO_FONTX:
|
||||
ret = compat_fontx_ioctl(cmd, up, perm, &op);
|
||||
break;
|
||||
return compat_fontx_ioctl(cmd, up, perm, &op);
|
||||
|
||||
case KDFONTOP:
|
||||
ret = compat_kdfontop_ioctl(up, perm, &op, vc);
|
||||
break;
|
||||
return compat_kdfontop_ioctl(up, perm, &op, vc);
|
||||
|
||||
case PIO_UNIMAP:
|
||||
case GIO_UNIMAP:
|
||||
ret = compat_unimap_ioctl(cmd, up, perm, vc);
|
||||
break;
|
||||
return compat_unimap_ioctl(cmd, up, perm, vc);
|
||||
|
||||
/*
|
||||
* all these treat 'arg' as an integer
|
||||
@@ -1236,21 +1229,15 @@ long vt_compat_ioctl(struct tty_struct *tty,
|
||||
case VT_DISALLOCATE:
|
||||
case VT_RESIZE:
|
||||
case VT_RESIZEX:
|
||||
goto fallback;
|
||||
return vt_ioctl(tty, cmd, arg);
|
||||
|
||||
/*
|
||||
* the rest has a compatible data structure behind arg,
|
||||
* but we have to convert it to a proper 64 bit pointer.
|
||||
*/
|
||||
default:
|
||||
arg = (unsigned long)compat_ptr(arg);
|
||||
goto fallback;
|
||||
return vt_ioctl(tty, cmd, (unsigned long)up);
|
||||
}
|
||||
out:
|
||||
return ret;
|
||||
|
||||
fallback:
|
||||
return vt_ioctl(tty, cmd, arg);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user