diff options
| author | Warner Losh <imp@FreeBSD.org> | 2000-07-19 06:32:00 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2000-07-19 06:32:00 +0000 |
| commit | 3c91d95c96f8b624d77629002a32c2b3fbb74b07 (patch) | |
| tree | 1948e1bb49dfe671134bfbc5d4d5bcc87bc9b6de | |
| parent | 05c36511b9e2a38667ccaab507de44e89f59dcde (diff) | |
Notes
| -rw-r--r-- | sys/i386/apm/apm.c | 16 | ||||
| -rw-r--r-- | sys/i386/bios/apm.c | 16 |
2 files changed, 32 insertions, 0 deletions
diff --git a/sys/i386/apm/apm.c b/sys/i386/apm/apm.c index 4eb99dd2804e..6b004648595c 100644 --- a/sys/i386/apm/apm.c +++ b/sys/i386/apm/apm.c @@ -1169,6 +1169,8 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) #endif switch (cmd) { case APMIO_SUSPEND: + if (!(flag & FWRITE)) + return (EPERM); if (sc->active) apm_suspend(PMST_SUSPEND); else @@ -1176,6 +1178,8 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) break; case APMIO_STANDBY: + if (!(flag & FWRITE)) + return (EPERM); if (sc->active) apm_suspend(PMST_STANDBY); else @@ -1203,23 +1207,35 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) error = ENXIO; break; case APMIO_ENABLE: + if (!(flag & FWRITE)) + return (EPERM); apm_event_enable(); break; case APMIO_DISABLE: + if (!(flag & FWRITE)) + return (EPERM); apm_event_disable(); break; case APMIO_HALTCPU: + if (!(flag & FWRITE)) + return (EPERM); apm_halt_cpu(); break; case APMIO_NOTHALTCPU: + if (!(flag & FWRITE)) + return (EPERM); apm_not_halt_cpu(); break; case APMIO_DISPLAY: + if (!(flag & FWRITE)) + return (EPERM); newstate = *(int *)addr; if (apm_display(newstate)) error = ENXIO; break; case APMIO_BIOS: + if (!(flag & FWRITE)) + return (EPERM); /* XXX compatibility with the old interface */ args = (struct apm_bios_arg *)addr; sc->bios.r.eax = args->eax; diff --git a/sys/i386/bios/apm.c b/sys/i386/bios/apm.c index 4eb99dd2804e..6b004648595c 100644 --- a/sys/i386/bios/apm.c +++ b/sys/i386/bios/apm.c @@ -1169,6 +1169,8 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) #endif switch (cmd) { case APMIO_SUSPEND: + if (!(flag & FWRITE)) + return (EPERM); if (sc->active) apm_suspend(PMST_SUSPEND); else @@ -1176,6 +1178,8 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) break; case APMIO_STANDBY: + if (!(flag & FWRITE)) + return (EPERM); if (sc->active) apm_suspend(PMST_STANDBY); else @@ -1203,23 +1207,35 @@ apmioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) error = ENXIO; break; case APMIO_ENABLE: + if (!(flag & FWRITE)) + return (EPERM); apm_event_enable(); break; case APMIO_DISABLE: + if (!(flag & FWRITE)) + return (EPERM); apm_event_disable(); break; case APMIO_HALTCPU: + if (!(flag & FWRITE)) + return (EPERM); apm_halt_cpu(); break; case APMIO_NOTHALTCPU: + if (!(flag & FWRITE)) + return (EPERM); apm_not_halt_cpu(); break; case APMIO_DISPLAY: + if (!(flag & FWRITE)) + return (EPERM); newstate = *(int *)addr; if (apm_display(newstate)) error = ENXIO; break; case APMIO_BIOS: + if (!(flag & FWRITE)) + return (EPERM); /* XXX compatibility with the old interface */ args = (struct apm_bios_arg *)addr; sc->bios.r.eax = args->eax; |
