lkml.org 
[lkml]   [2013]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 83/98] ext4: fix data offset overflow in ext4_xattr_fiemap() on 32-bit archs
    Date
    3.5.7.17 -stable review patch.  If anyone has any objections, please let me know.

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

    From: Jan Kara <jack@suse.cz>

    commit a60697f411eb365fb09e639e6f183fe33d1eb796 upstream.

    On 32-bit architectures with 32-bit sector_t computation of data offset
    in ext4_xattr_fiemap() can overflow resulting in reporting bogus data
    location. Fix the problem by typing block number to proper type before
    shifting.

    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    fs/ext4/extents.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
    index 5101df2..177f655 100644
    --- a/fs/ext4/extents.c
    +++ b/fs/ext4/extents.c
    @@ -4783,7 +4783,7 @@ static int ext4_xattr_fiemap(struct inode *inode,
    error = ext4_get_inode_loc(inode, &iloc);
    if (error)
    return error;
    - physical = iloc.bh->b_blocknr << blockbits;
    + physical = (__u64)iloc.bh->b_blocknr << blockbits;
    offset = EXT4_GOOD_OLD_INODE_SIZE +
    EXT4_I(inode)->i_extra_isize;
    physical += offset;
    @@ -4791,7 +4791,7 @@ static int ext4_xattr_fiemap(struct inode *inode,
    flags |= FIEMAP_EXTENT_DATA_INLINE;
    brelse(iloc.bh);
    } else { /* external block */
    - physical = EXT4_I(inode)->i_file_acl << blockbits;
    + physical = (__u64)EXT4_I(inode)->i_file_acl << blockbits;
    length = inode->i_sb->s_blocksize;
    }

    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-07-11 18:42    [W:4.225 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site