From 49a969dd87090cf0565e5c08036e887d56765353 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Sat, 30 Mar 2024 11:14:47 +0100 Subject: [PATCH] libblkid: introduce luks opal prober MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Accesses to a disk locked with OPAL trigger IO errors logged by the kernel which should be avoided. Running the normal luks prober first breaks the ordering of probers leading to incorrect detections, for example detecting mdadm superblocks before version 1.1 as luks. Introduce a new prober that only runs on OPAL-locked disks to avoid these false-positives. See #2061, #2373 and #2882. Signed-off-by: Thomas Weißschuh --- libblkid/src/superblocks/luks.c | 16 ++++++++++++++++ libblkid/src/superblocks/superblocks.c | 3 +++ libblkid/src/superblocks/superblocks.h | 1 + 3 files changed, 20 insertions(+) diff --git a/libblkid/src/superblocks/luks.c b/libblkid/src/superblocks/luks.c index 4623c98fc9..1c487f8ff3 100644 --- a/libblkid/src/superblocks/luks.c +++ b/libblkid/src/superblocks/luks.c @@ -139,6 +139,14 @@ static int probe_luks(blkid_probe pr, const struct blkid_idmag *mag __attribute_ return BLKID_PROBE_NONE; } +static int probe_luks_opal(blkid_probe pr, const struct blkid_idmag *mag) +{ + if (!blkdid_probe_is_opal_locked(pr)) + return BLKID_PROBE_NONE; + + return probe_luks(pr, mag); +} + const struct blkid_idinfo luks_idinfo = { .name = "crypto_LUKS", @@ -146,3 +154,11 @@ const struct blkid_idinfo luks_idinfo = .probefunc = probe_luks, .magics = BLKID_NONE_MAGIC }; + +const struct blkid_idinfo luks_opal_idinfo = +{ + .name = "crypto_LUKS", + .usage = BLKID_USAGE_CRYPTO, + .probefunc = probe_luks_opal, + .magics = BLKID_NONE_MAGIC, +}; diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c index dd1e6dcf31..e89cb598d6 100644 --- a/libblkid/src/superblocks/superblocks.c +++ b/libblkid/src/superblocks/superblocks.c @@ -94,6 +94,9 @@ static int blkid_probe_set_usage(blkid_probe pr, int usage); */ static const struct blkid_idinfo *idinfos[] = { + /* First, as access to locked OPAL region triggers IO errors */ + &luks_opal_idinfo, + /* RAIDs */ &linuxraid_idinfo, &ddfraid_idinfo, diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h index dc669e0fa0..140261eae8 100644 --- a/libblkid/src/superblocks/superblocks.h +++ b/libblkid/src/superblocks/superblocks.h @@ -68,6 +68,7 @@ extern const struct blkid_idinfo snapcow_idinfo; extern const struct blkid_idinfo verity_hash_idinfo; extern const struct blkid_idinfo integrity_idinfo; extern const struct blkid_idinfo luks_idinfo; +extern const struct blkid_idinfo luks_opal_idinfo; extern const struct blkid_idinfo highpoint37x_idinfo; extern const struct blkid_idinfo highpoint45x_idinfo; extern const struct blkid_idinfo squashfs_idinfo; -- 2.47.3