diff options
author | Warner Losh <imp@FreeBSD.org> | 2018-01-06 12:34:03 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2018-01-06 12:34:03 +0000 |
commit | 1723a6e523e36631bad04d57755f8d9f5f5a6889 (patch) | |
tree | 9760490412d902422caf7eb253b3e47135dffe37 /usr.sbin/diskinfo/diskinfo.c | |
parent | 917fa2a3e9052e871ca663e8031fcfbfc3a1049f (diff) | |
download | src-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.c | 9 |
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) |