-
Notifications
You must be signed in to change notification settings - Fork 54.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
IMA: Define an IMA hook to measure keys
Measure asymmetric keys used for verifying file signatures, certificates, etc. This patch defines a new IMA hook namely ima_post_key_create_or_update() to measure the payload used to create a new asymmetric key or update an existing asymmetric key. Asymmetric key structure is defined only when CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE is defined. Since the IMA hook measures asymmetric keys, the IMA hook is defined in a new file namely ima_asymmetric_keys.c which is built only if CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE is defined. Signed-off-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
- Loading branch information
Showing
2 changed files
with
53 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// SPDX-License-Identifier: GPL-2.0+ | ||
/* | ||
* Copyright (C) 2019 Microsoft Corporation | ||
* | ||
* Author: Lakshmi Ramasubramanian (nramas@linux.microsoft.com) | ||
* | ||
* File: ima_asymmetric_keys.c | ||
* Defines an IMA hook to measure asymmetric keys on key | ||
* create or update. | ||
*/ | ||
|
||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
|
||
#include <keys/asymmetric-type.h> | ||
#include "ima.h" | ||
|
||
/** | ||
* ima_post_key_create_or_update - measure asymmetric keys | ||
* @keyring: keyring to which the key is linked to | ||
* @key: created or updated key | ||
* @payload: The data used to instantiate or update the key. | ||
* @payload_len: The length of @payload. | ||
* @flags: key flags | ||
* @create: flag indicating whether the key was created or updated | ||
* | ||
* Keys can only be measured, not appraised. | ||
* The payload data used to instantiate or update the key is measured. | ||
*/ | ||
void ima_post_key_create_or_update(struct key *keyring, struct key *key, | ||
const void *payload, size_t payload_len, | ||
unsigned long flags, bool create) | ||
{ | ||
/* Only asymmetric keys are handled by this hook. */ | ||
if (key->type != &key_type_asymmetric) | ||
return; | ||
|
||
if (!payload || (payload_len == 0)) | ||
return; | ||
|
||
/* | ||
* keyring->description points to the name of the keyring | ||
* (such as ".builtin_trusted_keys", ".ima", etc.) to | ||
* which the given key is linked to. | ||
* | ||
* The name of the keyring is passed in the "eventname" | ||
* parameter to process_buffer_measurement() and is set | ||
* in the "eventname" field in ima_event_data for | ||
* the key measurement IMA event. | ||
*/ | ||
process_buffer_measurement(payload, payload_len, | ||
keyring->description, KEY_CHECK, 0); | ||
} |