Measurement Registers¶
-
struct tsm_measurement_register¶
describes an architectural measurement register (MR)
Definition:
struct tsm_measurement_register {
const char *mr_name;
void *mr_value;
u32 mr_size;
u32 mr_flags;
enum hash_algo mr_hash;
};
Members
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.
Description
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 ofTSM_MR_F_LIVE
andTSM_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_measurements¶
defines the CC architecture specific measurement facility and methods for updating measurement registers (MRs)
Definition:
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);
};
Members
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.
Description
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.
-
const struct attribute_group *tsm_mr_create_attribute_group(const struct tsm_measurements *tm)¶
creates an attribute group for measurement registers (MRs)
Parameters
const struct tsm_measurements *tm
pointer to
struct tsm_measurements
containing the MR definitions.
Description
This function creates attributes corresponding to the MR definitions provided by tm->mrs.
The created attributes will reference tm and its members. The caller must
not free tm until after tsm_mr_free_attribute_group()
is called.
Context
Process context. May sleep due to memory allocation.
Return
On success, the pointer to a an attribute group is returned; otherwise
-EINVAL
- Invalid MR definitions.-ENOMEM
- Out of memory.
-
void tsm_mr_free_attribute_group(const struct attribute_group *attr_grp)¶
frees the attribute group returned by
tsm_mr_create_attribute_group()
Parameters
const struct attribute_group *attr_grp
attribute group returned by
tsm_mr_create_attribute_group()
Context
Process context.