mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-06 00:10:04 +01:00
Allocate internal buffer in LUKS2 keyring token with crypt_safe_alloc.
With changes in db65a5ceac and subsequent
drop of library memlock_all we should lock keyring key material buffer
in memory system memory as well.
This commit is contained in:
committed by
Milan Broz
parent
dab00bfd4f
commit
cdfa213ad0
@@ -189,6 +189,8 @@ void keyring_dump(struct crypt_device *cd, const char *json);
|
|||||||
|
|
||||||
int keyring_validate(struct crypt_device *cd, const char *json);
|
int keyring_validate(struct crypt_device *cd, const char *json);
|
||||||
|
|
||||||
|
void keyring_buffer_free(void *buffer, size_t buffer_size);
|
||||||
|
|
||||||
struct crypt_token_handler_v2 {
|
struct crypt_token_handler_v2 {
|
||||||
const char *name;
|
const char *name;
|
||||||
crypt_token_open_func open;
|
crypt_token_open_func open;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ static struct crypt_token_handler_internal token_handlers[LUKS2_TOKENS_MAX] = {
|
|||||||
.u = {
|
.u = {
|
||||||
.v1 = { .name = LUKS2_TOKEN_KEYRING,
|
.v1 = { .name = LUKS2_TOKEN_KEYRING,
|
||||||
.open = keyring_open,
|
.open = keyring_open,
|
||||||
|
.buffer_free = keyring_buffer_free,
|
||||||
.validate = keyring_validate,
|
.validate = keyring_validate,
|
||||||
.dump = keyring_dump }
|
.dump = keyring_dump }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,3 +137,8 @@ int LUKS2_token_keyring_get(struct luks2_hdr *hdr,
|
|||||||
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void keyring_buffer_free(void *buffer, size_t buffer_len __attribute__((unused)))
|
||||||
|
{
|
||||||
|
crypt_safe_free(buffer);
|
||||||
|
}
|
||||||
|
|||||||
@@ -6491,8 +6491,7 @@ int crypt_activate_by_keyring(struct crypt_device *cd,
|
|||||||
|
|
||||||
r = _activate_by_passphrase(cd, name, keyslot, passphrase, passphrase_size, flags);
|
r = _activate_by_passphrase(cd, name, keyslot, passphrase, passphrase_size, flags);
|
||||||
|
|
||||||
crypt_safe_memzero(passphrase, passphrase_size);
|
crypt_safe_free(passphrase);
|
||||||
free(passphrase);
|
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ int keyring_get_passphrase(const char *key_desc,
|
|||||||
ret = keyctl_read(kid, NULL, 0);
|
ret = keyctl_read(kid, NULL, 0);
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
len = ret;
|
len = ret;
|
||||||
buf = malloc(len);
|
buf = crypt_safe_alloc(len);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
@@ -173,9 +173,7 @@ int keyring_get_passphrase(const char *key_desc,
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
err = errno;
|
err = errno;
|
||||||
if (buf)
|
crypt_safe_free(buf);
|
||||||
crypt_safe_memzero(buf, len);
|
|
||||||
free(buf);
|
|
||||||
return -err;
|
return -err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user