sysext: use LO_FLAGS_PARTSCAN when opening image
authorLuca Boccassi <luca.boccassi@microsoft.com>
Wed, 19 Jan 2022 00:27:45 +0000 (00:27 +0000)
committerLuca Boccassi <bluca@debian.org>
Tue, 15 Feb 2022 01:13:47 +0000 (01:13 +0000)
Jan 17 12:34:59 myguest1 (sd-sysext)[486]: Device '/var/lib/extensions/myext.raw' is loopback block device with partition scanning turned off, please turn it on.

Fixes https://github.com/systemd/systemd/issues/22146

(cherry picked from commit 70a5c6dce0872b3bb0a39be250adde86a0c8f35c)
(cherry picked from commit 4ef7122f3c3328aa01e1ed187a793e7b1595ee87)

src/sysext/sysext.c

index 572e4007fe27ff0072157520c70c823fbf337790..bcd87ab1527ec2c47030c6bc8a3dfbd697d36e5c 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <fcntl.h>
 #include <getopt.h>
+#include <linux/loop.h>
 #include <sys/mount.h>
 #include <unistd.h>
 
@@ -523,7 +524,11 @@ static int merge_subprocess(Hashmap *images, const char *workspace) {
                         if (verity_settings.data_path)
                                 flags |= DISSECT_IMAGE_NO_PARTITION_TABLE;
 
-                        r = loop_device_make_by_path(img->path, O_RDONLY, 0, &d);
+                        r = loop_device_make_by_path(
+                                        img->path,
+                                        O_RDONLY,
+                                        FLAGS_SET(flags, DISSECT_IMAGE_NO_PARTITION_TABLE) ? 0 : LO_FLAGS_PARTSCAN,
+                                        &d);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to set up loopback device for %s: %m", img->path);