From: Daniel P. Berrangé Date: Mon, 5 Sep 2022 12:50:03 +0000 (+0100) Subject: crypto: validate that LUKS payload doesn't overlap with header X-Git-Tag: v7.2.0-rc0~33^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d233fbc327d3f1f03bc30e0486b9ade3aa23f9ec;p=thirdparty%2Fqemu.git crypto: validate that LUKS payload doesn't overlap with header We already validate that LUKS keyslots don't overlap with the header, or with each other. This closes the remaining hole in validation of LUKS file regions. Reviewed-by: Richard W.M. Jones Signed-off-by: Daniel P. Berrangé --- diff --git a/crypto/block-luks.c b/crypto/block-luks.c index 6ef9a89ffa9..f22bc63e546 100644 --- a/crypto/block-luks.c +++ b/crypto/block-luks.c @@ -572,6 +572,13 @@ qcrypto_block_luks_check_header(const QCryptoBlockLUKS *luks, Error **errp) return -1; } + if (luks->header.payload_offset_sector < + DIV_ROUND_UP(QCRYPTO_BLOCK_LUKS_KEY_SLOT_OFFSET, + QCRYPTO_BLOCK_LUKS_SECTOR_SIZE)) { + error_setg(errp, "LUKS payload is overlapping with the header"); + return -1; + } + /* Check all keyslots for corruption */ for (i = 0 ; i < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS ; i++) {