mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-06 12:58:22 +03:00
cryptsetup: do not assert when unsealing token without salt
Salt was added in v253. We are not checking whether it was actually found (non-zero size), so when an old tpm+pin enrollment is opened things go boom. For good measure, check both the buffer and the size in both places. Assertion 'saltlen > 0' failed at src/shared/tpm2-util.c:2490, function tpm2_util_pbkdf2_hmac_sha256(). Aborting.
This commit is contained in:
parent
c126c8ac81
commit
504d0acf61
@ -38,6 +38,7 @@ int acquire_luks2_key(
|
||||
_cleanup_(erase_and_freep) char *b64_salted_pin = NULL;
|
||||
int r;
|
||||
|
||||
assert(salt || salt_size == 0);
|
||||
assert(ret_decrypted_key);
|
||||
assert(ret_decrypted_key_size);
|
||||
|
||||
@ -58,7 +59,7 @@ int acquire_luks2_key(
|
||||
if ((flags & TPM2_FLAGS_USE_PIN) && salt && !pin)
|
||||
return -ENOANO;
|
||||
|
||||
if (pin) {
|
||||
if (pin && salt_size > 0) {
|
||||
uint8_t salted_pin[SHA256_DIGEST_SIZE] = {};
|
||||
CLEANUP_ERASE(salted_pin);
|
||||
r = tpm2_util_pbkdf2_hmac_sha256(pin, strlen(pin), salt, salt_size, salted_pin);
|
||||
|
@ -86,6 +86,8 @@ int acquire_tpm2_key(
|
||||
const void *blob;
|
||||
int r;
|
||||
|
||||
assert(salt || salt_size == 0);
|
||||
|
||||
if (!device) {
|
||||
r = tpm2_find_device_auto(LOG_DEBUG, &auto_device);
|
||||
if (r == -ENODEV)
|
||||
@ -152,7 +154,7 @@ int acquire_tpm2_key(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (salt) {
|
||||
if (salt_size > 0) {
|
||||
uint8_t salted_pin[SHA256_DIGEST_SIZE] = {};
|
||||
CLEANUP_ERASE(salted_pin);
|
||||
|
||||
|
@ -2487,6 +2487,7 @@ int tpm2_util_pbkdf2_hmac_sha256(const void *pass,
|
||||
*/
|
||||
static const uint8_t block_cnt[] = { 0, 0, 0, 1 };
|
||||
|
||||
assert (salt);
|
||||
assert (saltlen > 0);
|
||||
assert (saltlen <= (SIZE_MAX - sizeof(block_cnt)));
|
||||
assert (passlen > 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user