aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2016-04-27 14:11:38 +0200
committerKevin Wolf <kwolf@redhat.com>2016-04-29 11:14:08 +0200
commitebb72c9f066e5f85259e1541a6d3fb5bfd6e73ff (patch)
tree71d7d0db8339e35c1e4f6b02547d2150dfe112ed
parent0d48dfedc5c2beb418ad4c08b78de14e794bb199 (diff)
downloadqemu-ebb72c9f066e5f85259e1541a6d3fb5bfd6e73ff.zip
qemu-ebb72c9f066e5f85259e1541a6d3fb5bfd6e73ff.tar.gz
qemu-ebb72c9f066e5f85259e1541a6d3fb5bfd6e73ff.tar.bz2
vvfat: Fix volume name assertion
Commit d5941dd made the volume name configurable, but it didn't consider that the rw code compares the volume name string to assert that the first directory entry is the volume name. This made vvfat crash in rw mode. This fixes the assertion to compare with the configured volume name instead of a literal string. Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--block/vvfat.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/block/vvfat.c b/block/vvfat.c
index 6b85314..ff3df35 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -2283,12 +2283,17 @@ DLOG(fprintf(stderr, "commit_direntries for %s, parent_mapping_index %d\n", mapp
factor * (old_cluster_count - new_cluster_count));
for (c = first_cluster; !fat_eof(s, c); c = modified_fat_get(s, c)) {
+ direntry_t *first_direntry;
void* direntry = array_get(&(s->directory), current_dir_index);
int ret = vvfat_read(s->bs, cluster2sector(s, c), direntry,
s->sectors_per_cluster);
if (ret)
return ret;
- assert(!strncmp(s->directory.pointer, "QEMU", 4));
+
+ /* The first directory entry on the filesystem is the volume name */
+ first_direntry = (direntry_t*) s->directory.pointer;
+ assert(!memcmp(first_direntry->name, s->volume_label, 11));
+
current_dir_index += factor;
}