aboutsummaryrefslogtreecommitdiff
path: root/sys/cam/ata
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2017-12-06 17:01:25 +0000
committerAlan Somers <asomers@FreeBSD.org>2017-12-06 17:01:25 +0000
commit99ae1d3b250cf034bbaf5bd54650aaf22e998553 (patch)
tree081666ee97513a31b257bf2e4885e86d465471b8 /sys/cam/ata
parentc0a8dfea7fde4de7da6fd22f101a399a55376ca4 (diff)
downloadsrc-99ae1d3b250cf034bbaf5bd54650aaf22e998553.tar.gz
src-99ae1d3b250cf034bbaf5bd54650aaf22e998553.zip
cam: fix sign-extension error in adagetparams
adagetparams contains a sign-extension error that will cause the sector count to be incorrectly calculated for ATA disks of >=1TiB that still use CHS addressing. Disks using LBA48 addressing are unaffected. Reported by: Coverity CID: 1007296 Reviewed by: ken MFC after: 3 weeks Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D13198
Notes
Notes: svn path=/head/; revision=326624
Diffstat (limited to 'sys/cam/ata')
-rw-r--r--sys/cam/ata/ata_da.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c
index 033afabe9e70..edb338e1e751 100644
--- a/sys/cam/ata/ata_da.c
+++ b/sys/cam/ata/ata_da.c
@@ -3377,7 +3377,8 @@ adagetparams(struct cam_periph *periph, struct ccb_getdev *cgd)
dp->heads = cgd->ident_data.heads;
dp->secs_per_track = cgd->ident_data.sectors;
dp->cylinders = cgd->ident_data.cylinders;
- dp->sectors = cgd->ident_data.cylinders * dp->heads * dp->secs_per_track;
+ dp->sectors = cgd->ident_data.cylinders *
+ (u_int32_t)(dp->heads * dp->secs_per_track);
}
lbasize = (u_int32_t)cgd->ident_data.lba_size_1 |
((u_int32_t)cgd->ident_data.lba_size_2 << 16);