]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
repart: return 1 from probe_sector_size_prefer_ioctl() on block device success
authorNandakumar Raghavan <naraghavan@microsoft.com>
Thu, 19 Feb 2026 13:42:19 +0000 (13:42 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 19 Feb 2026 16:43:56 +0000 (17:43 +0100)
probe_sector_size() returns 1 when it successfully determines the sector size,
0 when falling back to the default. blockdev_get_sector_size() returns 0 on
success. probe_sector_size_prefer_ioctl() was passing blockdev_get_sector_size()
return value through directly, so caller is checking r > 0 to detect a
successfully probed sector size never saw it for block devices.

In context_load_partition_table(), this caused fs_secsz to stay at 4096 bytes
even on 512-byte sector block devices, making verity hash partition sizes wrong
unless --sector-size=512 was passed explicitly.

Fix by returning 1 on success from the block device path to match probe_sector_size()
convention.

src/shared/dissect-image.c

index eb4b6bd609967a59532c7cb07e1174c189f54be6..9b9c3af2529f5399bc244f261bd18d0bd279380e 100644 (file)
@@ -200,8 +200,15 @@ int probe_sector_size_prefer_ioctl(int fd, uint32_t *ret) {
         if (fstat(fd, &st) < 0)
                 return -errno;
 
-        if (S_ISBLK(st.st_mode))
-                return blockdev_get_sector_size(fd, ret);
+        if (S_ISBLK(st.st_mode)) {
+                int r;
+
+                r = blockdev_get_sector_size(fd, ret);
+                if (r < 0)
+                        return r;
+
+                return 1; /* indicate we *did* find it, like probe_sector_size() does */
+        }
 
         return probe_sector_size(fd, ret);
 }