svn commit: r326624 - head/sys/cam/ata

Alan Somers asomers at freebsd.org
Wed Dec 6 18:15:46 UTC 2017


Nope.  The ATA spec prohibited them, and nobody ever manufactured any.  But
you might be able to fake one with CTL or QEMU or something similar.

On Wed, Dec 6, 2017 at 10:11 AM, Ravi Pokala <rpokala at mac.com> wrote:

> > ... disks of >=1TiB that still use CHS addressing.
>
> Out of morbid curiosity, are there any such monstrosities? <barf>
>
> -Ravi (rpokala@)
>
> -----Original Message-----
> From: <owner-src-committers at freebsd.org> on behalf of Alan Somers
> <asomers at FreeBSD.org>
> Date: 2017-12-06, Wednesday at 09:01
> To: <src-committers at freebsd.org>, <svn-src-all at freebsd.org>, <
> svn-src-head at freebsd.org>
> Subject: svn commit: r326624 - head/sys/cam/ata
>
> Author: asomers
> Date: Wed Dec  6 17:01:25 2017
> New Revision: 326624
> URL: https://svnweb.freebsd.org/changeset/base/326624
>
> Log:
>   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
>
> Modified:
>   head/sys/cam/ata/ata_da.c
>
> Modified: head/sys/cam/ata/ata_da.c
> ============================================================
> ==================
> --- head/sys/cam/ata/ata_da.c   Wed Dec  6 14:53:53 2017        (r326623)
> +++ head/sys/cam/ata/ata_da.c   Wed Dec  6 17:01:25 2017        (r326624)
> @@ -3377,7 +3377,8 @@ adagetparams(struct cam_periph *periph, struct
> ccb_get
>                 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);
>
>
>
>
>


More information about the svn-src-all mailing list