/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __TSM_MR_H
#define __TSM_MR_H
#include <crypto/hash_info.h>
/**
* struct tsm_measurement_register - describes an architectural measurement
* register ( MR )
* @ mr_name : name of the MR
* @ mr_value : buffer containing the current value of the MR
* @ mr_size : size of the MR - typically the digest size of @ mr_hash
* @ mr_flags : bitwise OR of one or more flags , detailed below
* @ mr_hash : optional hash identifier defined in include / uapi / linux / hash_info . h .
*
* A CC guest driver encloses an array of this structure in struct
* tsm_measurements to detail the measurement facility supported by the
* underlying CC hardware .
*
* @ mr_name and @ mr_value must stay valid until this structure is no longer in
* use .
*
* @ mr_flags is the bitwise - OR of zero or more of the flags below .
*
* * % TSM_MR_F_READABLE - the sysfs attribute corresponding to this MR is readable .
* * % TSM_MR_F_WRITABLE - the sysfs attribute corresponding to this MR is writable .
* The semantics is typically to extend the MR but could vary depending on the
* architecture and the MR .
* * % TSM_MR_F_LIVE - this MR ' s value may differ from the last value written , so
* must be read back from the underlying CC hardware / firmware .
* * % TSM_MR_F_RTMR - bitwise - OR of % TSM_MR_F_LIVE and % TSM_MR_F_WRITABLE .
* * % TSM_MR_F_NOHASH - this MR does NOT have an associated hash algorithm .
* @ mr_hash will be ignored when this flag is set .
*/
struct tsm_measurement_register {
const char *mr_name;
void *mr_value;
u32 mr_size;
u32 mr_flags;
enum hash_algo mr_hash;
};
#define TSM_MR_F_NOHASH 1
#define TSM_MR_F_WRITABLE 2
#define TSM_MR_F_READABLE 4
#define TSM_MR_F_LIVE 8
#define TSM_MR_F_RTMR (TSM_MR_F_LIVE | TSM_MR_F_WRITABLE)
#define TSM_MR_(mr, hash) \
.mr_name = #mr , .mr_size = hash## _DIGEST_SIZE, \
.mr_hash = HASH_ALGO_## hash, .mr_flags = TSM_MR_F_READABLE
/**
* struct tsm_measurements - defines the CC architecture specific measurement
* facility and methods for updating measurement registers ( MRs )
* @ mrs : Array of MR definitions .
* @ nr_mrs : Number of elements in @ mrs .
* @ refresh : Callback function to load / sync all MRs from TVM hardware / firmware
* into the kernel cache .
* @ write : Callback function to write to the MR specified by the parameter @ mr .
* Typically , writing to an MR extends the input buffer to that MR .
*
* The @ refresh callback is invoked when an MR with % TSM_MR_F_LIVE set is being
* read and the cache is stale . It must reload all MRs with % TSM_MR_F_LIVE set .
* The function parameter @ tm is a pointer pointing back to this structure .
*
* The @ write callback is invoked whenever an MR is being written . It takes two
* additional parameters besides @ tm :
*
* * @ mr - points to the MR ( an element of @ tm - > mrs ) being written .
* * @ data - contains the bytes to write and whose size is @ mr - > mr_size .
*
* Both @ refresh and @ write should return 0 on success and an appropriate error
* code on failure .
*/
struct tsm_measurements {
const struct tsm_measurement_register *mrs;
size_t nr_mrs;
int (*refresh)(const struct tsm_measurements *tm);
int (*write)(const struct tsm_measurements *tm,
const struct tsm_measurement_register *mr, const u8 *data);
};
const struct attribute_group *
tsm_mr_create_attribute_group(const struct tsm_measurements *tm);
void tsm_mr_free_attribute_group(const struct attribute_group *attr_grp);
#endif
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland