]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
vvfat: Fix bug in writing to middle of file
authorAmjad Alsharafi <amjadsharafi10@gmail.com>
Sat, 20 Jul 2024 10:13:30 +0000 (18:13 +0800)
committerKevin Wolf <kwolf@redhat.com>
Tue, 6 Aug 2024 18:12:39 +0000 (20:12 +0200)
Before this commit, the behavior when calling `commit_one_file` for
example with `offset=0x2000` (second cluster), what will happen is that
we won't fetch the next cluster from the fat, and instead use the first
cluster for the read operation.

This is due to off-by-one error here, where `i=0x2000 !< offset=0x2000`,
thus not fetching the next cluster.

Signed-off-by: Amjad Alsharafi <amjadsharafi10@gmail.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Tested-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <b97c1e1f1bc2f776061ae914f95d799d124fcd73.1721470238.git.amjadsharafi10@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/vvfat.c

index 086fedf4745f6f5b391cd875a29005931a87ff6b..a67cfa823bcaf267d07ca4d7b28221e51ebea083 100644 (file)
@@ -2525,8 +2525,9 @@ commit_one_file(BDRVVVFATState* s, int dir_index, uint32_t offset)
         return -1;
     }
 
-    for (i = s->cluster_size; i < offset; i += s->cluster_size)
+    for (i = 0; i < offset; i += s->cluster_size) {
         c = modified_fat_get(s, c);
+    }
 
     fd = qemu_open_old(mapping->path, O_RDWR | O_CREAT | O_BINARY, 0666);
     if (fd < 0) {