From f5ea63a5e17e18f1c22c901e0e48601e091ec859 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 29 Jul 2020 15:16:27 +0200 Subject: [PATCH] dissect: properly propagate some relevant dissection errors Let's send some specific error codes from helper process to parent via the return value, and convert them back there. --- src/shared/dissect-image.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 2b3d6c08f0..c42c4569b2 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "sd-device.h" #include "sd-id128.h" @@ -1596,7 +1597,14 @@ int decrypted_image_relinquish(DecryptedImage *d) { return 0; } -int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data, char **ret_roothashsig) { +int verity_metadata_load( + const char *image, + const char *root_hash_path, + void **ret_roothash, + size_t *ret_roothash_size, + char **ret_verity_data, + char **ret_roothashsig) { + _cleanup_free_ char *verity_filename = NULL, *roothashsig_filename = NULL; _cleanup_free_ void *roothash_decoded = NULL; size_t roothash_decoded_size = 0; @@ -1758,6 +1766,10 @@ int dissected_image_acquire_metadata(DissectedImage *m) { goto finish; if (r == 0) { r = dissected_image_mount(m, t, UID_INVALID, DISSECT_IMAGE_READ_ONLY|DISSECT_IMAGE_MOUNT_ROOT_ONLY|DISSECT_IMAGE_VALIDATE_OS); + if (r == -EMEDIUMTYPE) /* No /etc/os-release */ + _exit(EX_OSFILE); + if (r == -ENXIO) /* No root partition */ + _exit(EX_DATAERR); if (r < 0) { log_debug_errno(r, "Failed to mount dissected image: %m"); _exit(EXIT_FAILURE); @@ -1847,6 +1859,10 @@ int dissected_image_acquire_metadata(DissectedImage *m) { child = 0; if (r < 0) goto finish; + if (r == EX_OSFILE) + return -EMEDIUMTYPE; /* No os-release file */ + if (r == EX_DATAERR) + return -ENXIO; /* No root partition */ if (r != EXIT_SUCCESS) return -EPROTO;