diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2010-02-25 23:30:36 -0300 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2010-02-25 23:30:36 -0300 |
commit | 352de743974a48e282a5d37f053aa664404e311b (patch) | |
tree | 13a30a888ad68d5fb63746ad921bf1afc75c82d2 /block | |
parent | Merge commit '299e0bc52a5d56ff89ad8d7d09c82233cd8ccb6a' into stable-0.12-merge (diff) | |
parent | Merge remote branch 'qemu-kvm/uq/stable-0.12' into stable-0.12 (diff) | |
download | qemu-kvm-352de743974a48e282a5d37f053aa664404e311b.tar.gz qemu-kvm-352de743974a48e282a5d37f053aa664404e311b.tar.bz2 qemu-kvm-352de743974a48e282a5d37f053aa664404e311b.zip |
Merge commit '6173d56bdcb53389c54e803873e6bf8f87836a4f' into stable-0.12-merge
* commit '6173d56bdcb53389c54e803873e6bf8f87836a4f': (27 commits)
Update version and change for 0.12.3 release
qcow2: Fix access after end of array
ide save/restore pio/atapi cmd transfer fields and io buffer
net: Monitor command set_link finds only VLAN clients, fix
net: info network shows only VLAN clients, fix
net: net_check_clients() checks only VLAN clients, fix
net: Fix bogus "Warning: vlan 0 with no nics" with -device
net: net_check_clients() runs too early to see -device, fix
net: Remove unused net_client_uninit()
don't dereference NULL after failed strdup
virtio-net: fix network stall under load
json: fix PRId64 on Win32
fix inet_parse typo
iothread: fix vcpu stop with smp tcg
segfault due to buffer overrun in usb-serial
qcow2: Fix signedness bugs
Do not ignore error, if open file failed (-serial /dev/tty)
pc-bios: update to newer version of (stable) seabios
kvm: Fix eflags corruption in kvm mode
target-mips: fix ROTR and DROTR by zero
...
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
modified: net/slirp.c
Diffstat (limited to 'block')
-rw-r--r-- | block/curl.c | 2 | ||||
-rw-r--r-- | block/qcow2-cluster.c | 20 | ||||
-rw-r--r-- | block/qcow2.h | 6 | ||||
-rw-r--r-- | block/vvfat.c | 10 |
4 files changed, 20 insertions, 18 deletions
diff --git a/block/curl.c b/block/curl.c index 5223ce879..c9c457486 100644 --- a/block/curl.c +++ b/block/curl.c @@ -309,7 +309,7 @@ static int curl_open(BlockDriverState *bs, const char *filename, int flags) static int inited = 0; - file = strdup(filename); + file = qemu_strdup(filename); s->readahead_size = READ_AHEAD_SIZE; /* Parse a trailing ":readahead=#:" param, if present. */ diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 4e30d161a..b13b6935f 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -219,7 +219,8 @@ static uint64_t *l2_allocate(BlockDriverState *bs, int l1_index) BDRVQcowState *s = bs->opaque; int min_index; uint64_t old_l2_offset; - uint64_t *l2_table, l2_offset; + uint64_t *l2_table; + int64_t l2_offset; old_l2_offset = s->l1_table[l1_index]; @@ -560,7 +561,8 @@ uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs, { BDRVQcowState *s = bs->opaque; int l2_index, ret; - uint64_t l2_offset, *l2_table, cluster_offset; + uint64_t l2_offset, *l2_table; + int64_t cluster_offset; int nb_csectors; ret = get_cluster_table(bs, offset, &l2_table, &l2_offset, &l2_index); @@ -704,10 +706,8 @@ err: * * Return 0 on success and -errno in error cases */ -uint64_t qcow2_alloc_cluster_offset(BlockDriverState *bs, - uint64_t offset, - int n_start, int n_end, - int *num, QCowL2Meta *m) +int qcow2_alloc_cluster_offset(BlockDriverState *bs, uint64_t offset, + int n_start, int n_end, int *num, QCowL2Meta *m) { BDRVQcowState *s = bs->opaque; int l2_index, ret; @@ -750,12 +750,15 @@ uint64_t qcow2_alloc_cluster_offset(BlockDriverState *bs, while (i < nb_clusters) { i += count_contiguous_clusters(nb_clusters - i, s->cluster_size, &l2_table[l2_index], i, 0); - - if(be64_to_cpu(l2_table[l2_index + i])) + if ((i >= nb_clusters) || be64_to_cpu(l2_table[l2_index + i])) { break; + } i += count_contiguous_free_clusters(nb_clusters - i, &l2_table[l2_index + i]); + if (i >= nb_clusters) { + break; + } cluster_offset = be64_to_cpu(l2_table[l2_index + i]); @@ -763,6 +766,7 @@ uint64_t qcow2_alloc_cluster_offset(BlockDriverState *bs, (cluster_offset & QCOW_OFLAG_COMPRESSED)) break; } + assert(i <= nb_clusters); nb_clusters = i; /* diff --git a/block/qcow2.h b/block/qcow2.h index d9ea6abc5..de9397a3d 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -192,10 +192,8 @@ void qcow2_encrypt_sectors(BDRVQcowState *s, int64_t sector_num, uint64_t qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, int *num); -uint64_t qcow2_alloc_cluster_offset(BlockDriverState *bs, - uint64_t offset, - int n_start, int n_end, - int *num, QCowL2Meta *m); +int qcow2_alloc_cluster_offset(BlockDriverState *bs, uint64_t offset, + int n_start, int n_end, int *num, QCowL2Meta *m); uint64_t qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs, uint64_t offset, int compressed_size); diff --git a/block/vvfat.c b/block/vvfat.c index 063f7318c..c1acb3586 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -882,7 +882,7 @@ static int init_directories(BDRVVVFATState* s, mapping->dir_index = 0; mapping->info.dir.parent_mapping_index = -1; mapping->first_mapping_index = -1; - mapping->path = strdup(dirname); + mapping->path = qemu_strdup(dirname); i = strlen(mapping->path); if (i > 0 && mapping->path[i - 1] == '/') mapping->path[i - 1] = '\0'; @@ -1632,10 +1632,10 @@ static uint32_t get_cluster_count_for_direntry(BDRVVVFATState* s, /* rename */ if (strcmp(basename, basename2)) - schedule_rename(s, cluster_num, strdup(path)); + schedule_rename(s, cluster_num, qemu_strdup(path)); } else if (is_file(direntry)) /* new file */ - schedule_new_file(s, strdup(path), cluster_num); + schedule_new_file(s, qemu_strdup(path), cluster_num); else { assert(0); return 0; @@ -1752,10 +1752,10 @@ static int check_directory_consistency(BDRVVVFATState *s, mapping->mode &= ~MODE_DELETED; if (strcmp(basename, basename2)) - schedule_rename(s, cluster_num, strdup(path)); + schedule_rename(s, cluster_num, qemu_strdup(path)); } else /* new directory */ - schedule_mkdir(s, cluster_num, strdup(path)); + schedule_mkdir(s, cluster_num, qemu_strdup(path)); lfn_init(&lfn); do { |