]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dissect: make the --image= switch of our various tools honour Verity data
authorLennart Poettering <lennart@poettering.net>
Tue, 23 Mar 2021 13:07:53 +0000 (14:07 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 31 Mar 2021 08:36:14 +0000 (10:36 +0200)
This adds simple Verity support to
mount_image_privately_interactively(): we dicover the verity metadata
and use it.

src/shared/dissect-image.c

index c022368dfbda00f95f52507cfdb7964177ecef01..70739412a2fc8e0fbbef2c5de106ba1e120cc763 100644 (file)
@@ -2629,6 +2629,7 @@ int mount_image_privately_interactively(
                 LoopDevice **ret_loop_device,
                 DecryptedImage **ret_decrypted_image) {
 
+        _cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
         _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
         _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
         _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
@@ -2645,6 +2646,10 @@ int mount_image_privately_interactively(
         assert(ret_loop_device);
         assert(ret_decrypted_image);
 
+        r = verity_settings_load(&verity, image, NULL, NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to load root hash data: %m");
+
         r = tempfn_random_child(NULL, program_invocation_short_name, &temp);
         if (r < 0)
                 return log_error_errno(r, "Failed to generate temporary mount directory: %m");
@@ -2657,11 +2662,11 @@ int mount_image_privately_interactively(
         if (r < 0)
                 return log_error_errno(r, "Failed to set up loopback device: %m");
 
-        r = dissect_image_and_warn(d->fd, image, NULL, NULL, flags, &dissected_image);
+        r = dissect_image_and_warn(d->fd, image, &verity, NULL, flags, &dissected_image);
         if (r < 0)
                 return r;
 
-        r = dissected_image_decrypt_interactively(dissected_image, NULL, NULL, flags, &decrypted_image);
+        r = dissected_image_decrypt_interactively(dissected_image, NULL, &verity, flags, &decrypted_image);
         if (r < 0)
                 return r;