integrity: Detect PI/DIF capable devices in inline mode.

And print better error if not.
This commit is contained in:
Milan Broz
2025-02-19 15:06:47 +01:00
parent 006ebd832f
commit 352cda0302
4 changed files with 53 additions and 0 deletions

View File

@@ -3068,6 +3068,7 @@ int crypt_format_inline(struct crypt_device *cd,
void *params)
{
const struct crypt_params_integrity *iparams;
uint32_t device_tag_size;
struct device *idevice;
size_t sector_size, required_sector_size;
int r;
@@ -3113,6 +3114,17 @@ int crypt_format_inline(struct crypt_device *cd,
return -EINVAL;
}
if (!device_is_nop_dif(crypt_metadata_device(cd), &device_tag_size)) {
log_err(cd, _("Device %s does not provide inline integrity data fields."), mdata_device_path(cd));
return -EINVAL;
}
if (device_tag_size < iparams->tag_size) {
log_err(cd, _("Inline tag size %" PRIu32 " [bytes] is larger than %" PRIu32 " provided by device %s."),
iparams->tag_size, device_tag_size, mdata_device_path(cd));
return -EINVAL;
}
if (isINTEGRITY(type))
r = _crypt_format_integrity(cd, uuid, params, volume_key, volume_key_size, true);
else