diff options
| author | Darrick J. Wong <darrick.wong@oracle.com> | 2013-10-23 19:43:32 -0400 |
|---|---|---|
| committer | Theodore Ts'o <tytso@mit.edu> | 2013-10-23 19:56:21 -0400 |
| commit | d87f198ca3250c9dff6a4002cd2bbbb5ab6f113a (patch) | |
| tree | 0ae9a9a0efc73244e3e1d7a814b3e8fa8660bd7c /lib/ext2fs | |
| parent | cecfb4c04227dd5803c24b311d92a80e91b7b380 (diff) | |
| download | android_external_e2fsprogs-d87f198ca3250c9dff6a4002cd2bbbb5ab6f113a.tar.gz android_external_e2fsprogs-d87f198ca3250c9dff6a4002cd2bbbb5ab6f113a.tar.bz2 android_external_e2fsprogs-d87f198ca3250c9dff6a4002cd2bbbb5ab6f113a.zip | |
libext2fs: reject 64bit badblocks numbers
Don't accept block numbers larger than 2^32 for the badblocks list,
and don't run badblocks on them either.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'lib/ext2fs')
| -rw-r--r-- | lib/ext2fs/read_bb_file.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/ext2fs/read_bb_file.c b/lib/ext2fs/read_bb_file.c index 7d7bb7aa..8d1ad1a5 100644 --- a/lib/ext2fs/read_bb_file.c +++ b/lib/ext2fs/read_bb_file.c @@ -39,7 +39,7 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, void *priv_data)) { errcode_t retval; - blk_t blockno; + blk64_t blockno; int count; char buf[128]; @@ -55,9 +55,12 @@ errcode_t ext2fs_read_bb_FILE2(ext2_filsys fs, FILE *f, while (!feof (f)) { if (fgets(buf, sizeof(buf), f) == NULL) break; - count = sscanf(buf, "%u", &blockno); + count = sscanf(buf, "%llu", &blockno); if (count <= 0) continue; + /* Badblocks isn't going to be updated for 64bit */ + if (blockno >> 32) + return EOVERFLOW; if (fs && ((blockno < fs->super->s_first_data_block) || (blockno >= ext2fs_blocks_count(fs->super)))) { |
