On Wed, Feb 06, 2013 at 01:31:48PM +0100, Benoît Canet wrote: > @@ -148,6 +158,19 @@ static int qcow2_read_extensions(BlockDriverState *bs, > uint64_t start_offset, > } > break; > > + case QCOW2_EXT_MAGIC_DEDUP_TABLE: > + ret = bdrv_pread(bs->file, offset, > + &dedup_table_extension, ext.len);
Buffer overflow if ext.len > sizeof(dedup_table_extension). Please check ext.len before using it. > + if (ret < 0) { > + return ret; > + } > + s->dedup_table_offset = > + be64_to_cpu(dedup_table_extension.offset); > + s->dedup_table_size = > + be32_to_cpu(dedup_table_extension.size); > + s->dedup_hash_algo = dedup_table_extension.hash_algo; Input validation for these fields (especially table size)?