aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmjad Alsharafi <amjadsharafi10@gmail.com>2024-07-20 18:13:30 +0800
committerMichael Tokarev <mjt@tls.msk.ru>2024-08-11 10:47:27 +0300
commit17962e1ea84529046731ad828dcf707231d97fc4 (patch)
treea4df34dd86ba3ca7451b4a4d777d0bcf371b1f7d
parentfc2e706f4c5f8c081812a9dde482a96485d55cb8 (diff)
vvfat: Fix bug in writing to middle of file
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> (cherry picked from commit b881cf00c99e03bc8a3648581f97736ff275b18b) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--block/vvfat.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/vvfat.c b/block/vvfat.c
index 723c91216e..741fdb0341 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -2522,8 +2522,9 @@ static int commit_one_file(BDRVVVFATState* s,
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) {