From a4fc697e582df87509be8d6cb04c6954d5d8656c Mon Sep 17 00:00:00 2001 From: Kazutaka YOKOTA Date: Sun, 22 Jul 2001 13:58:23 +0000 Subject: [PATCH] - Fix "off by one" error in VT_WAITACTIVATE. Correctly accept 0 as meaning the requesting vty. - Accept 0 as the requesting vty in VT_ACTIVATE as in VT_WAITACTIVE. PR: 24423 MFC after: 10 days --- sys/dev/syscons/syscons.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index f0ba0d36f10a..c4610976b0b2 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -942,22 +942,22 @@ scioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) return EINVAL; case VT_ACTIVATE: /* switch to screen *data */ + i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1); s = spltty(); sc_clean_up(sc->cur_scp); splx(s); - return sc_switch_scr(sc, *(int *)data - 1); + return sc_switch_scr(sc, i); case VT_WAITACTIVE: /* wait for switch to occur */ - if ((*(int *)data >= sc->first_vty + sc->vtys) - || (*(int *)data < sc->first_vty)) + i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1); + if ((i < sc->first_vty) || (i >= sc->first_vty + sc->vtys)) return EINVAL; s = spltty(); error = sc_clean_up(sc->cur_scp); splx(s); if (error) return error; - if (*(int *)data != 0) - scp = SC_STAT(SC_DEV(sc, *(int *)data - 1)); + scp = SC_STAT(SC_DEV(sc, i)); if (scp == scp->sc->cur_scp) return 0; while ((error=tsleep((caddr_t)&scp->smode, PZERO|PCATCH,