aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/diskinfo/diskinfo.c
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2018-01-06 12:34:03 +0000
committerWarner Losh <imp@FreeBSD.org>2018-01-06 12:34:03 +0000
commit1723a6e523e36631bad04d57755f8d9f5f5a6889 (patch)
tree9760490412d902422caf7eb253b3e47135dffe37 /usr.sbin/diskinfo/diskinfo.c
parent917fa2a3e9052e871ca663e8031fcfbfc3a1049f (diff)
downloadsrc-1723a6e523e36631bad04d57755f8d9f5f5a6889.tar.gz
src-1723a6e523e36631bad04d57755f8d9f5f5a6889.zip
Sanity check media size and sector counts to ensure that we don't
produce negative sector numbers in the testing algorithm. CID: 1198994
Notes
Notes: svn path=/head/; revision=327617
Diffstat (limited to 'usr.sbin/diskinfo/diskinfo.c')
-rw-r--r--usr.sbin/diskinfo/diskinfo.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.sbin/diskinfo/diskinfo.c b/usr.sbin/diskinfo/diskinfo.c
index 00dd96880242..56912afa844b 100644
--- a/usr.sbin/diskinfo/diskinfo.c
+++ b/usr.sbin/diskinfo/diskinfo.c
@@ -407,9 +407,14 @@ speeddisk(int fd, off_t mediasize, u_int sectorsize)
int bulk, i;
off_t b0, b1, sectorcount, step;
+ /*
+ * Drives smaller than 1MB produce negative sector numbers,
+ * as do 2048 or fewer sectors.
+ */
sectorcount = mediasize / sectorsize;
- if (sectorcount <= 0)
- return; /* Can't test devices with no sectors */
+ if (mediasize < 1024 * 1024 || sectorcount < 2048)
+ return;
+
step = 1ULL << (flsll(sectorcount / (4 * 200)) - 1);
if (step > 16384)