crypto: enforce that key material doesn't overlap with LUKS header
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 10 May 2022 13:35:57 +0000 (14:35 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 27 Oct 2022 11:55:27 +0000 (12:55 +0100)
We already check that key material doesn't overlap between key slots,
and that it doesn't overlap with the payload. We didn't check for
overlap with the LUKS header.

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

index 81744e2a8ee59cf13ba78ba241ca24cd3eac1cce..6ef9a89ffa96ab792c1936195fdfe2de6fe9996c 100644 (file)
@@ -595,6 +595,14 @@ qcrypto_block_luks_check_header(const QCryptoBlockLUKS *luks, Error **errp)
             return -1;
         }
 
+        if (start1 < DIV_ROUND_UP(sizeof(QCryptoBlockLUKSHeader),
+                                  QCRYPTO_BLOCK_LUKS_SECTOR_SIZE)) {
+            error_setg(errp,
+                       "Keyslot %zu is overlapping with the LUKS header",
+                       i);
+            return -1;
+        }
+
         if (start1 + len1 > luks->header.payload_offset_sector) {
             error_setg(errp,
                        "Keyslot %zu is overlapping with the encrypted payload",