测量寄存器¶
-
struct tsm_measurement_register¶
描述架构测量寄存器 (MR)
定义:
struct tsm_measurement_register {
const char *mr_name;
void *mr_value;
u32 mr_size;
u32 mr_flags;
enum hash_algo mr_hash;
};
成员
mr_name
MR 的名称
mr_value
包含 MR 当前值的缓冲区
mr_size
MR 的大小 - 通常是 mr_hash 的摘要大小
mr_flags
一个或多个标志的按位或,详见下文
mr_hash
include/uapi/linux/hash_info.h 中定义的可选哈希标识符。
描述
CC guest 驱动程序将此结构的数组封闭在 struct tsm_measurements
中,以详细说明底层 CC 硬件支持的测量设施。
mr_name 和 mr_value 必须保持有效,直到不再使用此结构。
mr_flags 是零个或多个以下标志的按位或。
TSM_MR_F_READABLE
- 与此 MR 对应的 sysfs 属性是可读的。TSM_MR_F_WRITABLE
- 与此 MR 对应的 sysfs 属性是可写的。 语义通常是扩展 MR,但可能因架构和 MR 而异。TSM_MR_F_LIVE
- 此 MR 的值可能与上次写入的值不同,因此必须从底层 CC 硬件/固件读取回来。TSM_MR_F_RTMR
-TSM_MR_F_LIVE
和TSM_MR_F_WRITABLE
的按位或。TSM_MR_F_NOHASH
- 此 MR 没有相关的哈希算法。 设置此标志时,将忽略 mr_hash。
-
struct tsm_measurements¶
定义 CC 架构特定的测量设施和用于更新测量寄存器 (MR) 的方法
定义:
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);
};
成员
mrs
MR 定义数组。
nr_mrs
mrs 中的元素数。
刷新
回调函数,用于将所有 MR 从 TVM 硬件/固件加载/同步到内核缓存中。
写入
回调函数,用于写入参数 mr 指定的 MR。 通常,写入 MR 会将输入缓冲区扩展到该 MR。
描述
当正在读取设置了 TSM_MR_F_LIVE
的 MR 且缓存已过期时,将调用 refresh 回调。 它必须重新加载所有设置了 TSM_MR_F_LIVE
的 MR。 函数参数 tm 是一个指针,指向回此结构。
每当写入 MR 时,都会调用 write 回调。 除了 tm 之外,它还需要两个额外的参数
mr - 指向正在写入的 MR(tm->mrs 的一个元素)。
data - 包含要写入的字节,其大小为 mr->mr_size。
refresh 和 write 都应在成功时返回 0,并在失败时返回适当的错误代码。
-
const struct attribute_group *tsm_mr_create_attribute_group(const struct tsm_measurements *tm)¶
为测量寄存器 (MR) 创建属性组
参数
const struct tsm_measurements *tm
指向包含 MR 定义的
struct tsm_measurements
的指针。
描述
此函数创建与 tm->mrs 提供的 MR 定义相对应的属性。
创建的属性将引用 tm 及其成员。 在调用 tsm_mr_free_attribute_group()
之前,调用者不得释放 tm。
上下文
进程上下文。 由于内存分配可能会休眠。
返回
成功时,将返回指向属性组的指针; 否则
-EINVAL
- 无效的 MR 定义。-ENOMEM
- 内存不足。
-
void tsm_mr_free_attribute_group(const struct attribute_group *attr_grp)¶
释放
tsm_mr_create_attribute_group()
返回的属性组