crypto: strengthen the check for key slots overlapping with LUKS header
authorDaniel P. Berrangé <berrange@redhat.com>
Mon, 5 Sep 2022 12:57:01 +0000 (13:57 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 27 Oct 2022 11:55:27 +0000 (12:55 +0100)
The LUKS header data on disk is a fixed size, however, there's expected
to be a gap between the end of the header and the first key slot to get
alignment with the 2nd sector on 4k drives. This wasn't originally part
of the LUKS spec, but was always part of the reference implementation,
so it is worth validating this.

Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
crypto/block-luks.c

index f22bc63e5460c7001590a336f0408fa6fcfa9eab..e6ee8506b2e7b7a93a1c54752398cdd405f2b97f 100644 (file)
@@ -602,7 +602,7 @@ qcrypto_block_luks_check_header(const QCryptoBlockLUKS *luks, Error **errp)
             return -1;
         }
 
-        if (start1 < DIV_ROUND_UP(sizeof(QCryptoBlockLUKSHeader),
+        if (start1 < DIV_ROUND_UP(QCRYPTO_BLOCK_LUKS_KEY_SLOT_OFFSET,
                                   QCRYPTO_BLOCK_LUKS_SECTOR_SIZE)) {
             error_setg(errp,
                        "Keyslot %zu is overlapping with the LUKS header",