From 1969b6be2fde56cb82ccbedcd39daf3f646ed897 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 26 Aug 2023 17:53:29 +0200 Subject: [PATCH] Print blkid scan failure. If old util-linux is used, blkid scan can fail because disk is already locked for OPAL. Do the same for other internal blkid issue. Also add some debug messages to be clear what's going on. --- src/cryptsetup.c | 15 ++++++++++++--- src/integritysetup.c | 5 ++++- src/utils_blockdev.c | 14 ++++++++++++-- src/utils_reencrypt.c | 5 ++++- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index 6deeb14d..4f20d1c4 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -207,8 +207,11 @@ static int action_open_plain(void) if (!ARG_UINT64(OPT_OFFSET_ID)) { /* Print all present signatures in read-only mode */ r = tools_detect_signatures(action_argv[0], PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID)); - if (r < 0) + if (r < 0) { + if (r == -EIO) + log_err(_("Blkid scan failed for %s."), action_argv[0]); goto out; + } } if (signatures && !ARG_SET(OPT_BATCH_MODE_ID)) { @@ -1303,8 +1306,11 @@ static int action_luksRepair(void) } r = tools_detect_signatures(action_argv[0], PRB_FILTER_LUKS, NULL, ARG_SET(OPT_BATCH_MODE_ID)); - if (r < 0) + if (r < 0) { + if (r == -EIO) + log_err(_("Blkid scan failed for %s."), action_argv[0]); goto out; + } if (!ARG_SET(OPT_BATCH_MODE_ID) && !yesDialog(_("Really try to repair LUKS device header?"), @@ -1490,8 +1496,11 @@ int luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_password /* Print all present signatures in read-only mode */ r = tools_detect_signatures(header_device, PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID)); - if (r < 0) + if (r < 0) { + if (r == -EIO) + log_err(_("Blkid scan failed for %s."), header_device); goto out; + } if (!created && !ARG_SET(OPT_BATCH_MODE_ID)) { r = asprintf(&msg, _("This will overwrite data on %s irrevocably."), header_device); diff --git a/src/integritysetup.c b/src/integritysetup.c index 6d5b7cf9..186fff23 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -191,8 +191,11 @@ static int action_format(void) } r = tools_detect_signatures(action_argv[0], PRB_FILTER_NONE, &signatures, ARG_SET(OPT_BATCH_MODE_ID)); - if (r < 0) + if (r < 0) { + if (r == -EIO) + log_err(_("Blkid scan failed for %s."), action_argv[0]); goto out; + } /* Signature candidates found */ if (signatures && ((r = tools_wipe_all_signatures(action_argv[0], true, false)) < 0)) diff --git a/src/utils_blockdev.c b/src/utils_blockdev.c index ae6dec49..418a7a0b 100644 --- a/src/utils_blockdev.c +++ b/src/utils_blockdev.c @@ -222,17 +222,22 @@ int tools_detect_signatures(const char *device, tools_probe_filter_info filter, switch (filter) { case PRB_FILTER_LUKS: + log_dbg("Blkid check (filter LUKS)."); if (blk_superblocks_filter_luks(h)) { r = -EINVAL; + log_dbg("Blkid filter LUKS probe failed."); goto out; } /* fall-through */ case PRB_FILTER_NONE: + log_dbg("Blkid check (filter none)."); blk_set_chains_for_full_print(h); break; case PRB_ONLY_LUKS: + log_dbg("Blkid check (LUKS only)."); blk_set_chains_for_fast_detection(h); if (blk_superblocks_only_luks(h)) { + log_dbg("Blkid only LUKS probe failed."); r = -EINVAL; goto out; } @@ -251,8 +256,11 @@ int tools_detect_signatures(const char *device, tools_probe_filter_info filter, (*count)++; } - if (pr == PRB_FAIL) - r = -EINVAL; + if (pr == PRB_FAIL) { + /* Expect device cannot be read */ + r = -EIO; + log_dbg("Blkid probe failed."); + } out: blk_free(h); return r; @@ -302,6 +310,8 @@ int tools_wipe_all_signatures(const char *path, bool exclusive, bool only_luks) goto out; } + log_dbg("Blkid wipe."); + while ((pr = blk_probe(h)) < PRB_EMPTY) { if (blk_is_partition(h)) log_verbose(_("Existing '%s' partition signature on device %s will be wiped."), diff --git a/src/utils_reencrypt.c b/src/utils_reencrypt.c index 8ffceb36..9a4e74c3 100644 --- a/src/utils_reencrypt.c +++ b/src/utils_reencrypt.c @@ -1329,8 +1329,11 @@ static int check_broken_luks_signature(const char *device) size_t count; r = tools_detect_signatures(device, PRB_ONLY_LUKS, &count, ARG_SET(OPT_BATCH_MODE_ID)); - if (r < 0) + if (r < 0) { + if (r == -EIO) + log_err(_("Blkid scan failed for %s."), device); return -EINVAL; + } if (count) { log_err(_("Device %s contains broken LUKS metadata. Aborting operation."), device); return -EINVAL;