diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2005-08-27 14:14:49 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2005-08-27 14:14:49 +0000 |
commit | 33b4f5f5f5558003ba4a6493fcc8600d807f0869 (patch) | |
tree | 7a8f0952837ad831958ac1e0338f547b687c8bd5 /sys/dev | |
parent | 85239c54fc1b8ea649d5f04292b1b135358b65ea (diff) |
Use the ATA security FREEZE LOCK command on disks before
they are presented to the rest of the system to stop
a password being set that could deny access to the disk.
ok grange@ deraadt@
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ata/wd.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c index 840f088b165..d29a9bb9b9c 100644 --- a/sys/dev/ata/wd.c +++ b/sys/dev/ata/wd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: wd.c,v 1.42 2005/05/15 18:09:29 grange Exp $ */ +/* $OpenBSD: wd.c,v 1.43 2005/08/27 14:14:48 jsg Exp $ */ /* $NetBSD: wd.c,v 1.193 1999/02/28 17:15:27 explorer Exp $ */ /* @@ -262,6 +262,7 @@ wdattach(struct device *parent, struct device *self, void *aux) { struct wd_softc *wd = (void *)self; struct ata_atapi_attach *aa_link= aux; + struct wdc_command wdc_c; int i, blank; char buf[41], c, *p, *q; WDCDEBUG_PRINT(("wdattach\n"), DEBUG_FUNCS | DEBUG_PROBE); @@ -359,6 +360,24 @@ wdattach(struct device *parent, struct device *self, void *aux) WDCDEBUG_PRINT(("%s: atap_dmatiming_mimi=%d, atap_dmatiming_recom=%d\n", self->dv_xname, wd->sc_params.atap_dmatiming_mimi, wd->sc_params.atap_dmatiming_recom), DEBUG_PROBE); + + /* + * FREEZE LOCK the drive so malicous users can't lock it on us. + * As there is no harm in issuing this to drives that don't + * support the security feature set we just send it, and don't + * bother checking if the drive sends a command abort to tell us it + * doesn't support it. + */ + bzero(&wdc_c, sizeof(struct wdc_command)); + + wdc_c.r_command = WDCC_SEC_FREEZE_LOCK; + wdc_c.timeout = 1000; + wdc_c.flags = at_poll; + if (wdc_exec_command(wd->drvp, &wdc_c) != WDC_COMPLETE) { + printf("%s: freeze lock command didn't complete\n", + wd->sc_dev.dv_xname); + } + /* * Initialize and attach the disk structure. */ |