From: Zheng Liu <gnehzuil.liu@gmail.com>
To: Theodore Ts'o <tytso@mit.edu>
Cc: Ext4 Developers List <linux-ext4@vger.kernel.org>
Subject: Re: [PATCH 5/5] libext2fs: avoid 32-bit overflow in ext2fs_initialize with a 512M cluster size
Date: Tue, 15 Jan 2013 23:33:31 +0800 [thread overview]
Message-ID: <20130115153331.GE19209@gmail.com> (raw)
In-Reply-To: <1358210232-30578-5-git-send-email-tytso@mit.edu>
On Mon, Jan 14, 2013 at 07:37:12PM -0500, Theodore Ts'o wrote:
> If the user attemps to create a 512MB cluster, we need to adjust the
> defaults to avoid a 32-bit overflow of s_blocks_per_group. Also check
> to make sure that the caller of ext2fs_initialize() has not given a
> value of s_clusters_per_group that would result in an overflow of
> s_blocks_per_group.
>
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
The patch itself looks good to me. Feel free to add:
Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
FWIW, I wonder why we need to add such complex logical to handle a
corner case. I guess no one wants to use a 512MB cluster. So changing
max cluster size from 512MB to 256MB is very simple and straightfoward.
Regards,
- Zheng
> ---
> lib/ext2fs/initialize.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/lib/ext2fs/initialize.c b/lib/ext2fs/initialize.c
> index b0c15d2..5afdc27 100644
> --- a/lib/ext2fs/initialize.c
> +++ b/lib/ext2fs/initialize.c
> @@ -207,6 +207,8 @@ errcode_t ext2fs_initialize(const char *name, int flags,
> super->s_log_block_size;
>
> if (bigalloc_flag) {
> + unsigned long long bpg;
> +
> if (param->s_blocks_per_group &&
> param->s_clusters_per_group &&
> ((param->s_clusters_per_group * EXT2FS_CLUSTER_RATIO(fs)) !=
> @@ -220,12 +222,19 @@ errcode_t ext2fs_initialize(const char *name, int flags,
> super->s_clusters_per_group =
> param->s_blocks_per_group /
> EXT2FS_CLUSTER_RATIO(fs);
> - else
> + else if (super->s_log_cluster_size + 15 < 32)
> super->s_clusters_per_group = fs->blocksize * 8;
> + else
> + super->s_clusters_per_group = (fs->blocksize - 1) * 8;
> if (super->s_clusters_per_group > EXT2_MAX_CLUSTERS_PER_GROUP(super))
> super->s_clusters_per_group = EXT2_MAX_CLUSTERS_PER_GROUP(super);
> - super->s_blocks_per_group = EXT2FS_C2B(fs,
> - super->s_clusters_per_group);
> + bpg = EXT2FS_C2B(fs,
> + (unsigned long long) super->s_clusters_per_group);
> + if (bpg >= (((unsigned long long) 1) << 32)) {
> + retval = EXT2_ET_INVALID_ARGUMENT;
> + goto cleanup;
> + }
> + super->s_blocks_per_group = bpg;
> } else {
> set_field(s_blocks_per_group, fs->blocksize * 8);
> if (super->s_blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(super))
> --
> 1.7.12.rc0.22.gcdd159b
>
next prev parent reply other threads:[~2013-01-15 15:19 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-13 9:08 [PATCH 1/3] mke2fs: indicate bigalloc feature explicity when cluster-size is enabled Zheng Liu
2013-01-13 9:08 ` [PATCH 2/3] mke2fs: reduce the range of cluster-size Zheng Liu
2013-01-14 17:41 ` Andreas Dilger
2013-01-14 21:03 ` Theodore Ts'o
2013-01-14 21:07 ` Andreas Dilger
2013-01-14 21:10 ` Theodore Ts'o
2013-01-15 0:37 ` [PATCH 1/5] mke2fs: enforce that the cluster size must be less that the block size Theodore Ts'o
2013-01-15 0:37 ` [PATCH 2/5] mke2fs: the -g option will now specify the clusters per block group Theodore Ts'o
2013-01-15 15:10 ` Eric Sandeen
2013-01-15 19:05 ` Theodore Ts'o
2013-01-15 15:22 ` Zheng Liu
2013-01-15 0:37 ` [PATCH 3/5] libe2p: teach parse_num_blocks2() to return bytes if log_block_size < 0 Theodore Ts'o
2013-01-15 15:23 ` Zheng Liu
2013-01-15 0:37 ` [PATCH 4/5] mke2fs: teach mke2fs to understand -b 4k and -C 256M Theodore Ts'o
2013-01-15 15:11 ` Eric Sandeen
2013-01-15 15:13 ` Eric Sandeen
2013-01-15 15:24 ` Zheng Liu
2013-01-15 0:37 ` [PATCH 5/5] libext2fs: avoid 32-bit overflow in ext2fs_initialize with a 512M cluster size Theodore Ts'o
2013-01-15 15:33 ` Zheng Liu [this message]
2013-01-15 15:36 ` Zheng Liu
2013-01-15 19:10 ` Theodore Ts'o
2013-01-16 1:49 ` Zheng Liu
2013-01-15 0:41 ` [PATCH 1/5] mke2fs: enforce that the cluster size must be less that the block size Theodore Ts'o
2013-01-15 15:22 ` Zheng Liu
2013-01-13 9:08 ` [PATCH 3/3] mke2fs: document bigalloc and cluster-size Zheng Liu
2013-01-15 3:10 ` Theodore Ts'o
2013-01-15 19:12 ` Theodore Ts'o
2013-01-15 19:46 ` Phillip Susi
2013-01-15 19:57 ` Theodore Ts'o
2013-01-15 20:38 ` Phillip Susi
2013-01-15 22:28 ` Theodore Ts'o
2013-01-14 20:28 ` [PATCH 1/3] mke2fs: indicate bigalloc feature explicity when cluster-size is enabled Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130115153331.GE19209@gmail.com \
--to=gnehzuil.liu@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.