summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2000-07-19 06:32:00 +0000
committerWarner Losh <imp@FreeBSD.org>2000-07-19 06:32:00 +0000
commit3c91d95c96f8b624d77629002a32c2b3fbb74b07 (patch)
tree1948e1bb49dfe671134bfbc5d4d5bcc87bc9b6de
parent05c36511b9e2a38667ccaab507de44e89f59dcde (diff)
Notes
-rw-r--r--sys/i386/apm/apm.c16
-rw-r--r--sys/i386/bios/apm.c16
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;