lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 12 Feb 2010 14:49:40 -0700
From:	Andreas Dilger <adilger@....com>
To:	Leonard Michlmayr <leonard.michlmayr@...il.com>
Cc:	ext4 development <linux-ext4@...r.kernel.org>,
	surbhi.palande@...onical.com,
	"linux-kernel@...r.kernel.org Mailinglist" 
	<linux-kernel@...r.kernel.org>, 474597@...s.launchpad.net
Subject: Re: [PATCH 2.6.32.7] ext4: number of blocks for fiemap

On 2010-02-12, at 11:42, Leonard Michlmayr wrote:
> fs/ext4/extents.c:ext4_fiemap rounds the length of the requested range
> down to blocksize. This is not the true number of blocks that cover  
> the
> requested region. This problem is especially impressive if the user
> requests only the first byte of a file: not a single extent will be
> reported.
>
> Solution:
> Calculate the last byte of the region and round to blocksize. Then get
> the number of blocks by subtracting last_blk - start_blk and adding 1
> for the first block. (The variable last_blk is introduced just for
> easier reading.) This patch will fix this.
>
> I already suggested this patch some time ago, this is the same patch  
> for
> a more recent kernel version.
>
> Signed-off-by: Leonard Michlmayr <leonard.michlmayr@...il.com>
>
> diff -rup linux-2.6.32.7/fs/ext4/extents.c linux-2.6.32.7-lm/fs/ext4/ 
> extents.c
> --- linux-2.6.32.7/fs/ext4/extents.c	2010-01-29 00:06:20.000000000  
> +0100
> +++ linux-2.6.32.7-lm/fs/ext4/extents.c	2010-02-11  
> 21:26:40.000000000 +0100
> @@ -3711,6 +3711,7 @@ int ext4_fiemap(struct inode *inode, str
> 		__u64 start, __u64 len)
> {
> 	ext4_lblk_t start_blk;
> +	ext4_lblk_t last_blk;
> 	ext4_lblk_t len_blks;
> 	int error = 0;
>
> @@ -3726,7 +3727,9 @@ int ext4_fiemap(struct inode *inode, str
> 		error = ext4_xattr_fiemap(inode, fieinfo);
> 	} else {
> 		start_blk = start >> inode->i_sb->s_blocksize_bits;
> -		len_blks = len >> inode->i_sb->s_blocksize_bits;
> +		/* the last byte in the range is (start + len - 1) */
> +		last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
> +		len_blks = last_blk - start_blk + 1;


If "last_blk" is only used in this one place, please put the  
declaration inside the scope of the "else" clause.  Looks fine  
otherwise.

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ