测量寄存器

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_namemr_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_LIVETSM_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

refreshwrite 都应在成功时返回 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() 返回的属性组

参数

const struct attribute_group *attr_grp

tsm_mr_create_attribute_group() 返回的属性组

上下文

进程上下文。