diff options
author | 2011-07-18 00:13:16 +0000 | |
---|---|---|
committer | 2011-07-18 00:13:16 +0000 | |
commit | 537c0d25158b9e8add8175b6b4fcb1eebd9367bc (patch) | |
tree | 72870ffa447c2a2d7d2cfed9aaae50de87f1fc6d | |
parent | Backout a bunch of my SCSI commits from c2k11. At least one of these (diff) | |
download | wireguard-openbsd-537c0d25158b9e8add8175b6b4fcb1eebd9367bc.tar.xz wireguard-openbsd-537c0d25158b9e8add8175b6b4fcb1eebd9367bc.zip |
Fix an off-by-1 error and a 32-bit integer arithmetic overflow bug
that caused large disks to appear offline.
Discovered and tested by mlarkin@; ok dlg@
-rw-r--r-- | sys/scsi/sd.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c index b7f63b0aed5..69347a1128e 100644 --- a/sys/scsi/sd.c +++ b/sys/scsi/sd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sd.c,v 1.237 2011/07/12 04:25:49 dlg Exp $ */ +/* $OpenBSD: sd.c,v 1.238 2011/07/18 00:13:16 matthew Exp $ */ /* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */ /*- @@ -1374,7 +1374,7 @@ sd_read_cap_10(struct sd_softc *sc, int flags) scsi_xs_put(xs); if (rv == 0) { - sc->params.disksize = _4btol(rdcap->addr) + 1; + sc->params.disksize = _4btol(rdcap->addr) + 1ll; sc->params.secsize = _4btol(rdcap->length); CLR(sc->flags, SDF_THIN); } @@ -1442,7 +1442,7 @@ sd_size(struct sd_softc *sc, int flags) rv = sd_read_cap_10(sc, flags); } else { rv = sd_read_cap_10(sc, flags); - if (rv == 0 && sc->params.disksize == 0xffffffff) + if (rv == 0 && sc->params.disksize == 0x100000000ll) rv = sd_read_cap_16(sc, flags); } |