Clean up kbdioctl():
* Make sure all uses of the data pointer are type-cast appropriately. * Eliminate the super-user check in the KIOCSKEY case (back as it was). * Return ENOTTY if the ioctl command code is unrecognized.
This commit is contained in:
parent
b021feb71d
commit
0889565499
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: kbd.c,v 1.15 1997/10/03 23:04:46 gwr Exp $ */
|
/* $NetBSD: kbd.c,v 1.16 1997/10/21 15:17:31 gwr Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
|
@ -399,7 +399,6 @@ kbdioctl(dev, cmd, data, flag, p)
|
||||||
{
|
{
|
||||||
struct kbd_softc *k;
|
struct kbd_softc *k;
|
||||||
struct kbd_state *ks;
|
struct kbd_state *ks;
|
||||||
int *ip;
|
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
k = kbd_cd.cd_devs[minor(dev)];
|
k = kbd_cd.cd_devs[minor(dev)];
|
||||||
|
@ -408,16 +407,14 @@ kbdioctl(dev, cmd, data, flag, p)
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
|
||||||
case KIOCTRANS: /* Set translation mode */
|
case KIOCTRANS: /* Set translation mode */
|
||||||
ip = (int *)data;
|
|
||||||
/* We only support "raw" mode on /dev/kbd */
|
/* We only support "raw" mode on /dev/kbd */
|
||||||
if (*ip != TR_UNTRANS_EVENT)
|
if (*(int *)data != TR_UNTRANS_EVENT)
|
||||||
error = EINVAL;
|
error = EINVAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCGTRANS: /* Get translation mode */
|
case KIOCGTRANS: /* Get translation mode */
|
||||||
ip = (int *)data;
|
|
||||||
/* We only support "raw" mode on /dev/kbd */
|
/* We only support "raw" mode on /dev/kbd */
|
||||||
*ip = TR_UNTRANS_EVENT;
|
*(int *)data = TR_UNTRANS_EVENT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef KIOCGETKEY
|
#ifdef KIOCGETKEY
|
||||||
|
@ -427,30 +424,25 @@ kbdioctl(dev, cmd, data, flag, p)
|
||||||
#endif KIOCGETKEY */
|
#endif KIOCGETKEY */
|
||||||
|
|
||||||
case KIOCSKEY: /* Set keymap entry */
|
case KIOCSKEY: /* Set keymap entry */
|
||||||
/* Don't let just anyone hose the keyboard. */
|
|
||||||
if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)
|
|
||||||
return (error);
|
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case KIOCGKEY: /* Get keymap entry */
|
case KIOCGKEY: /* Get keymap entry */
|
||||||
error = kbd_iockeymap(ks, cmd, (struct kiockeymap *)data);
|
error = kbd_iockeymap(ks, cmd, (struct kiockeymap *)data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCCMD: /* Send a command to the keyboard */
|
case KIOCCMD: /* Send a command to the keyboard */
|
||||||
error = kbd_docmd(*((int *)data), 1);
|
error = kbd_docmd(*(int *)data, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCTYPE: /* Get keyboard type */
|
case KIOCTYPE: /* Get keyboard type */
|
||||||
ip = (int *)data;
|
*(int *)data = ks->kbd_id;
|
||||||
*ip = ks->kbd_id;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCSDIRECT: /* where to send input */
|
case KIOCSDIRECT: /* where to send input */
|
||||||
ip = (int *)data;
|
k->k_evmode = *(int *)data;
|
||||||
k->k_evmode = *ip;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCLAYOUT: /* Get keyboard layout */
|
case KIOCLAYOUT: /* Get keyboard layout */
|
||||||
*data = ks->kbd_layout;
|
*(int *)data = ks->kbd_layout;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KIOCSLED:
|
case KIOCSLED:
|
||||||
|
@ -469,11 +461,13 @@ kbdioctl(dev, cmd, data, flag, p)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIOCSPGRP:
|
case TIOCSPGRP:
|
||||||
ip = (int *)data;
|
if (*(int *)data != k->k_events.ev_io->p_pgid)
|
||||||
if (*ip != k->k_events.ev_io->p_pgid)
|
|
||||||
error = EPERM;
|
error = EPERM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (error);
|
return (error);
|
||||||
|
|
Loading…
Reference in New Issue