]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: fix alignment of merged initrd
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 15 Feb 2024 01:44:21 +0000 (10:44 +0900)
committerLennart Poettering <lennart@poettering.net>
Thu, 15 Feb 2024 08:11:55 +0000 (09:11 +0100)
Follow-up for 811ad9e6b2b243428165c239aeb4791bc65b93dd.

Fixes CID#1534481.

src/vmspawn/vmspawn.c

index 116f0143cde44d6f054988946267aaabc5863839..dc796e5bbf1eae49f83cd7ffcf4b687d5806b82a 100644 (file)
@@ -920,10 +920,15 @@ static int merge_initrds(char **ret) {
         if (ofd < 0)
                 return log_error_errno(errno, "Failed to create regular file %s: %m", merged_initrd);
 
-        size_t total_size = 0;
         STRV_FOREACH(i, arg_initrds) {
                 _cleanup_close_ int ifd = -EBADF;
-                size_t to_seek = (4 - (total_size % 4)) % 4;
+                off_t off, to_seek;
+
+                off = lseek(ofd, 0, SEEK_CUR);
+                if (off < 0)
+                        return log_error_errno(errno, "Failed to get file offset of %s: %m", merged_initrd);
+
+                to_seek = (4 - (off % 4)) % 4;
 
                 /* seek to assure 4 byte alignment for each initrd */
                 if (to_seek != 0 && lseek(ofd, to_seek, SEEK_CUR) < 0)