summaryrefslogtreecommitdiff
path: root/src/partition
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-16 22:10:50 +0100
committerDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-16 22:10:50 +0100
commit6eccec00fb50e1a35f5a11e3339d634541bcc3a8 (patch)
treeb78d20618d7f4ea86ae4c32303bf3e8a85d6d01a /src/partition
parent9f94d2741f7259bfb89a4165f035f79683acec3b (diff)
downloadsystemd-6eccec00fb50e1a35f5a11e3339d634541bcc3a8.tar.gz
repart: Make sure we seek to beginning of partition target before copy
Diffstat (limited to 'src/partition')
-rw-r--r--src/partition/repart.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 2b1fbbdae2..e631464998 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -3266,6 +3266,9 @@ static int partition_target_sync(Context *context, Partition *p, PartitionTarget
if (lseek(whole_fd, p->offset, SEEK_SET) == (off_t) -1)
return log_error_errno(errno, "Failed to seek to partition offset: %m");
+ if (lseek(t->fd, 0, SEEK_SET) == (off_t) -1)
+ return log_error_errno(errno, "Failed to seek to start of temporary file: %m");
+
r = copy_bytes(t->fd, whole_fd, UINT64_MAX, COPY_REFLINK|COPY_HOLES|COPY_FSYNC);
if (r < 0)
return log_error_errno(r, "Failed to copy bytes to partition: %m");