summaryrefslogtreecommitdiffstats
path: root/sys/i386/bios
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2000-07-19 06:32:00 +0000
committerimp <imp@FreeBSD.org>2000-07-19 06:32:00 +0000
commit141cdecc82d2e817892277d9cb0e80112ed9661f (patch)
tree76cc13ea075c889bf024521c1d2f10479d143b5e /sys/i386/bios
parent174b0abb778419b135794001f2dc68abaf345e67 (diff)
downloadFreeBSD-src-141cdecc82d2e817892277d9cb0e80112ed9661f.zip
FreeBSD-src-141cdecc82d2e817892277d9cb0e80112ed9661f.tar.gz
Except for the information gathering IOCTLs, require apm device be
opened for write. This should make the apm device read only safe.
Diffstat (limited to 'sys/i386/bios')
-rw-r--r--sys/i386/bios/apm.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/i386/bios/apm.c b/sys/i386/bios/apm.c
index 4eb99dd..6b00464 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;
OpenPOWER on IntegriCloud