]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: fix loading verity settings for MountImages=
authorLuca Boccassi <luca.boccassi@gmail.com>
Thu, 12 Dec 2024 00:24:05 +0000 (00:24 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 12 Dec 2024 00:58:20 +0000 (00:58 +0000)
The MountEntry logic was refactored to store the verity
settings, and updated for ExtensionImages=, but not for
MountImages=.

Follow-up for a1a40297dbfa5bcd926d1a19320deb73c033c6f5

src/core/namespace.c
test/units/TEST-50-DISSECT.dissect.sh

index 2f3b8f03d130892afe0f879129bf384dd1667de3..c9362e55abdee5a49b7bd268139a2cf28267c92e 100644 (file)
@@ -480,20 +480,28 @@ static int append_bind_mounts(MountList *ml, const BindMount *binds, size_t n) {
 }
 
 static int append_mount_images(MountList *ml, const MountImage *mount_images, size_t n) {
+        int r;
+
         assert(ml);
         assert(mount_images || n == 0);
 
         FOREACH_ARRAY(m, mount_images, n) {
+                _cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
                 MountEntry *me = mount_list_extend(ml);
                 if (!me)
                         return log_oom_debug();
 
+                r = verity_settings_load(&verity, m->source, /* root_hash_path= */ NULL, /* root_hash_sig_path= */ NULL);
+                if (r < 0)
+                        return log_debug_errno(r, "Failed to check verity root hash of %s: %m", m->source);
+
                 *me = (MountEntry) {
                         .path_const = m->destination,
                         .mode = MOUNT_IMAGE,
                         .source_const = m->source,
                         .image_options_const = m->mount_options,
                         .ignore = m->ignore_enoent,
+                        .verity = TAKE_GENERIC(verity, VeritySettings, VERITY_SETTINGS_DEFAULT),
                 };
         }
 
index 6cf12135517f38c8799c4baade93ab89de4da81e..09cb676200fb2bb053aa3f07374f9e744d7be60f 100755 (executable)
@@ -281,6 +281,9 @@ systemd-run -P \
             -p RootHash="$MINIMAL_IMAGE_ROOTHASH" \
             -p MountImages="$MINIMAL_IMAGE.gpt:/run/img1 $MINIMAL_IMAGE.raw:/run/img2" \
             cat /run/img2/usr/lib/os-release | grep -q -F "MARKER=1"
+systemd-run -P \
+            -p MountImages="$MINIMAL_IMAGE.raw:/run/img2" \
+            veritysetup status "${MINIMAL_IMAGE_ROOTHASH}-verity" | grep -q "${MINIMAL_IMAGE_ROOTHASH}"
 cat >/run/systemd/system/testservice-50c.service <<EOF
 [Service]
 MountAPIVFS=yes