1 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <linux/sizes.h>
6 #include <linux/types.h>
7 #include <linux/uuid.h>
9 #define TSM_INBLOB_MAX 64
10 #define TSM_OUTBLOB_MAX SZ_32K
13 * Privilege level is a nested permission concept to allow confidential
14 * guests to partition address space, 4-levels are supported.
16 #define TSM_PRIVLEVEL_MAX 3
19 * struct tsm_desc - option descriptor for generating tsm report blobs
20 * @privlevel: optional privilege level to associate with @outblob
21 * @inblob_len: sizeof @inblob
22 * @inblob: arbitrary input data
23 * @service_provider: optional name of where to obtain the tsm report blob
24 * @service_guid: optional service-provider service guid to attest
25 * @service_manifest_version: optional service-provider service manifest version requested
28 unsigned int privlevel
;
30 u8 inblob
[TSM_INBLOB_MAX
];
31 char *service_provider
;
33 unsigned int service_manifest_version
;
37 * struct tsm_report - track state of report generation relative to options
38 * @desc: input parameters to @report_new()
39 * @outblob_len: sizeof(@outblob)
40 * @outblob: generated evidence to provider to the attestation agent
41 * @auxblob_len: sizeof(@auxblob)
42 * @auxblob: (optional) auxiliary data to the report (e.g. certificate data)
43 * @manifestblob_len: sizeof(@manifestblob)
44 * @manifestblob: (optional) manifest data associated with the report
52 size_t manifestblob_len
;
57 * enum tsm_attr_index - index used to reference report attributes
58 * @TSM_REPORT_GENERATION: index of the report generation number attribute
59 * @TSM_REPORT_PROVIDER: index of the provider name attribute
60 * @TSM_REPORT_PRIVLEVEL: index of the desired privilege level attribute
61 * @TSM_REPORT_PRIVLEVEL_FLOOR: index of the minimum allowed privileg level attribute
62 * @TSM_REPORT_SERVICE_PROVIDER: index of the service provider identifier attribute
63 * @TSM_REPORT_SERVICE_GUID: index of the service GUID attribute
64 * @TSM_REPORT_SERVICE_MANIFEST_VER: index of the service manifest version attribute
67 TSM_REPORT_GENERATION
,
70 TSM_REPORT_PRIVLEVEL_FLOOR
,
71 TSM_REPORT_SERVICE_PROVIDER
,
72 TSM_REPORT_SERVICE_GUID
,
73 TSM_REPORT_SERVICE_MANIFEST_VER
,
77 * enum tsm_bin_attr_index - index used to reference binary report attributes
78 * @TSM_REPORT_INBLOB: index of the binary report input attribute
79 * @TSM_REPORT_OUTBLOB: index of the binary report output attribute
80 * @TSM_REPORT_AUXBLOB: index of the binary auxiliary data attribute
81 * @TSM_REPORT_MANIFESTBLOB: index of the binary manifest data attribute
83 enum tsm_bin_attr_index
{
87 TSM_REPORT_MANIFESTBLOB
,
91 * struct tsm_ops - attributes and operations for tsm instances
92 * @name: tsm id reflected in /sys/kernel/config/tsm/report/$report/provider
93 * @privlevel_floor: convey base privlevel for nested scenarios
94 * @report_new: Populate @report with the report blob and auxblob
95 * (optional), return 0 on successful population, or -errno otherwise
96 * @report_attr_visible: show or hide a report attribute entry
97 * @report_bin_attr_visible: show or hide a report binary attribute entry
99 * Implementation specific ops, only one is expected to be registered at
100 * a time i.e. only one of "sev-guest", "tdx-guest", etc.
104 unsigned int privlevel_floor
;
105 int (*report_new
)(struct tsm_report
*report
, void *data
);
106 bool (*report_attr_visible
)(int n
);
107 bool (*report_bin_attr_visible
)(int n
);
110 int tsm_register(const struct tsm_ops
*ops
, void *priv
);
111 int tsm_unregister(const struct tsm_ops
*ops
);