summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/analyze/analyze.c1
-rw-r--r--src/boot/bootctl.c1
-rw-r--r--src/coredump/coredumpctl.c1
-rw-r--r--src/firstboot/firstboot.c1
-rw-r--r--src/journal/journalctl.c1
-rw-r--r--src/machine-id-setup/machine-id-setup-main.c1
-rw-r--r--src/partition/repart.c1
-rw-r--r--src/shared/dissect-image.c11
-rw-r--r--src/shared/dissect-image.h2
-rw-r--r--src/systemctl/systemctl.c1
-rw-r--r--src/sysupdate/sysupdate.c1
-rw-r--r--src/sysusers/sysusers.c1
-rw-r--r--src/tmpfiles/tmpfiles.c1
13 files changed, 23 insertions, 1 deletions
diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
index ef2e60962b..aaa7e4b706 100644
--- a/src/analyze/analyze.c
+++ b/src/analyze/analyze.c
@@ -625,6 +625,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_RELAX_VAR_CHECK |
DISSECT_IMAGE_READ_ONLY,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
index 914825564e..53794d1b7a 100644
--- a/src/boot/bootctl.c
+++ b/src/boot/bootctl.c
@@ -467,6 +467,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_GENERIC_ROOT |
DISSECT_IMAGE_RELAX_VAR_CHECK,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c
index 8a4f31aa62..4c312d0fbb 100644
--- a/src/coredump/coredumpctl.c
+++ b/src/coredump/coredumpctl.c
@@ -1366,6 +1366,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_RELAX_VAR_CHECK |
DISSECT_IMAGE_VALIDATE_OS,
&mounted_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index 9e79f84691..5eaaff7d84 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -1389,6 +1389,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_FSCK |
DISSECT_IMAGE_GROWFS,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 0267fc6506..e10f0b7564 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -2125,6 +2125,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_RELAX_VAR_CHECK |
(arg_action == ACTION_UPDATE_CATALOG ? DISSECT_IMAGE_FSCK|DISSECT_IMAGE_GROWFS : DISSECT_IMAGE_READ_ONLY),
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c
index 9101f4e11a..5620bf9baf 100644
--- a/src/machine-id-setup/machine-id-setup-main.c
+++ b/src/machine-id-setup/machine-id-setup-main.c
@@ -147,6 +147,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_FSCK |
DISSECT_IMAGE_GROWFS,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 272bf19431..0e51f4d8d3 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -6429,6 +6429,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_USR_NO_ROOT |
DISSECT_IMAGE_REQUIRE_ROOT,
&mounted_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
index 210e2c7cf7..9a4bac99a1 100644
--- a/src/shared/dissect-image.c
+++ b/src/shared/dissect-image.c
@@ -3315,6 +3315,7 @@ int mount_image_privately_interactively(
const char *image,
DissectImageFlags flags,
char **ret_directory,
+ int *ret_dir_fd,
LoopDevice **ret_loop_device) {
_cleanup_(verity_settings_done) VeritySettings verity = VERITY_SETTINGS_DEFAULT;
@@ -3388,6 +3389,16 @@ int mount_image_privately_interactively(
if (r < 0)
return log_error_errno(r, "Failed to relinquish DM and loopback block devices: %m");
+ if (ret_dir_fd) {
+ _cleanup_close_ int dir_fd = -EBADF;
+
+ dir_fd = open(created_dir, O_CLOEXEC|O_DIRECTORY);
+ if (dir_fd < 0)
+ return log_error_errno(errno, "Failed to open mount point directory: %m");
+
+ *ret_dir_fd = TAKE_FD(dir_fd);
+ }
+
*ret_directory = TAKE_PTR(created_dir);
*ret_loop_device = TAKE_PTR(d);
diff --git a/src/shared/dissect-image.h b/src/shared/dissect-image.h
index 143d6ff501..3efe784ee9 100644
--- a/src/shared/dissect-image.h
+++ b/src/shared/dissect-image.h
@@ -183,7 +183,7 @@ bool dissected_image_verity_candidate(const DissectedImage *image, PartitionDesi
bool dissected_image_verity_ready(const DissectedImage *image, PartitionDesignator d);
bool dissected_image_verity_sig_ready(const DissectedImage *image, PartitionDesignator d);
-int mount_image_privately_interactively(const char *path, DissectImageFlags flags, char **ret_directory, LoopDevice **ret_loop_device);
+int mount_image_privately_interactively(const char *path, DissectImageFlags flags, char **ret_directory, int *ret_dir_fd, LoopDevice **ret_loop_device);
int verity_dissect_and_mount(int src_fd, const char *src, const char *dest, const MountOptions *options, const char *required_host_os_release_id, const char *required_host_os_release_version_id, const char *required_host_os_release_sysext_level, const char *required_sysext_scope);
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 4732398dd7..a752c6dce4 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1222,6 +1222,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_RELAX_VAR_CHECK |
DISSECT_IMAGE_VALIDATE_OS,
&mounted_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c
index f6e89130bc..a3d2c5a9b9 100644
--- a/src/sysupdate/sysupdate.c
+++ b/src/sysupdate/sysupdate.c
@@ -881,6 +881,7 @@ static int process_image(
DISSECT_IMAGE_GENERIC_ROOT |
DISSECT_IMAGE_REQUIRE_ROOT,
&mounted_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 3c438a38f1..70abcfa131 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -2180,6 +2180,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_FSCK |
DISSECT_IMAGE_GROWFS,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 458aed7054..04a860c021 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -4142,6 +4142,7 @@ static int run(int argc, char *argv[]) {
DISSECT_IMAGE_FSCK |
DISSECT_IMAGE_GROWFS,
&unlink_dir,
+ /* ret_dir_fd= */ NULL,
&loop_device);
if (r < 0)
return r;