lkml.org 
[lkml]   [2010]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[065/117] libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2)
    2.6.33-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Mark Lord <kernel@teksavvy.com>

    commit 45c4d015a92f72ec47acd0c7557abdc0c8a6499d upstream.

    Most drives from Seagate, Hitachi, and possibly other brands,
    do not allow LBA28 access to sector number 0x0fffffff (2^28 - 1).
    So instead use LBA48 for such accesses.

    This bug could bite a lot of systems, especially when the user has
    taken care to align partitions to 4KB boundaries. On misaligned systems,
    it is less likely to be encountered, since a 4KB read would end at
    0x10000000 rather than at 0x0fffffff.

    Signed-off-by: Mark Lord <mlord@pobox.com>
    Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    include/linux/ata.h | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/include/linux/ata.h
    +++ b/include/linux/ata.h
    @@ -1024,8 +1024,8 @@ static inline int ata_ok(u8 status)

    static inline int lba_28_ok(u64 block, u32 n_block)
    {
    - /* check the ending block number */
    - return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256);
    + /* check the ending block number: must be LESS THAN 0x0fffffff */
    + return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);
    }

    static inline int lba_48_ok(u64 block, u32 n_block)



    \
     
     \ /
      Last update: 2010-05-12 10:11    [W:4.068 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site