summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatthew <matthew@openbsd.org>2011-07-18 00:13:16 +0000
committermatthew <matthew@openbsd.org>2011-07-18 00:13:16 +0000
commit537c0d25158b9e8add8175b6b4fcb1eebd9367bc (patch)
tree72870ffa447c2a2d7d2cfed9aaae50de87f1fc6d
parentBackout a bunch of my SCSI commits from c2k11. At least one of these (diff)
downloadwireguard-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.c6
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);
}