xref: /linux/include/trace/events/fsverity.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*fa19d42cSAndrey Albershteyn /* SPDX-License-Identifier: GPL-2.0 */
2*fa19d42cSAndrey Albershteyn #undef TRACE_SYSTEM
3*fa19d42cSAndrey Albershteyn #define TRACE_SYSTEM fsverity
4*fa19d42cSAndrey Albershteyn 
5*fa19d42cSAndrey Albershteyn #if !defined(_TRACE_FSVERITY_H) || defined(TRACE_HEADER_MULTI_READ)
6*fa19d42cSAndrey Albershteyn #define _TRACE_FSVERITY_H
7*fa19d42cSAndrey Albershteyn 
8*fa19d42cSAndrey Albershteyn #include <linux/tracepoint.h>
9*fa19d42cSAndrey Albershteyn 
10*fa19d42cSAndrey Albershteyn struct fsverity_descriptor;
11*fa19d42cSAndrey Albershteyn struct merkle_tree_params;
12*fa19d42cSAndrey Albershteyn struct fsverity_info;
13*fa19d42cSAndrey Albershteyn 
14*fa19d42cSAndrey Albershteyn TRACE_EVENT(fsverity_enable,
15*fa19d42cSAndrey Albershteyn 	TP_PROTO(const struct inode *inode,
16*fa19d42cSAndrey Albershteyn 		 const struct merkle_tree_params *params),
17*fa19d42cSAndrey Albershteyn 	TP_ARGS(inode, params),
18*fa19d42cSAndrey Albershteyn 	TP_STRUCT__entry(
19*fa19d42cSAndrey Albershteyn 		__field(ino_t, ino)
20*fa19d42cSAndrey Albershteyn 		__field(u64, data_size)
21*fa19d42cSAndrey Albershteyn 		__field(u64, tree_size)
22*fa19d42cSAndrey Albershteyn 		__field(unsigned int, merkle_block)
23*fa19d42cSAndrey Albershteyn 		__field(unsigned int, num_levels)
24*fa19d42cSAndrey Albershteyn 	),
25*fa19d42cSAndrey Albershteyn 	TP_fast_assign(
26*fa19d42cSAndrey Albershteyn 		__entry->ino = inode->i_ino;
27*fa19d42cSAndrey Albershteyn 		__entry->data_size = i_size_read(inode);
28*fa19d42cSAndrey Albershteyn 		__entry->tree_size = params->tree_size;
29*fa19d42cSAndrey Albershteyn 		__entry->merkle_block = params->block_size;
30*fa19d42cSAndrey Albershteyn 		__entry->num_levels = params->num_levels;
31*fa19d42cSAndrey Albershteyn 	),
32*fa19d42cSAndrey Albershteyn 	TP_printk("ino %lu data_size %llu tree_size %llu merkle_block %u levels %u",
33*fa19d42cSAndrey Albershteyn 		(unsigned long) __entry->ino,
34*fa19d42cSAndrey Albershteyn 		__entry->data_size,
35*fa19d42cSAndrey Albershteyn 		__entry->tree_size,
36*fa19d42cSAndrey Albershteyn 		__entry->merkle_block,
37*fa19d42cSAndrey Albershteyn 		__entry->num_levels)
38*fa19d42cSAndrey Albershteyn );
39*fa19d42cSAndrey Albershteyn 
40*fa19d42cSAndrey Albershteyn TRACE_EVENT(fsverity_tree_done,
41*fa19d42cSAndrey Albershteyn 	TP_PROTO(const struct inode *inode, const struct fsverity_info *vi,
42*fa19d42cSAndrey Albershteyn 		 const struct merkle_tree_params *params),
43*fa19d42cSAndrey Albershteyn 	TP_ARGS(inode, vi, params),
44*fa19d42cSAndrey Albershteyn 	TP_STRUCT__entry(
45*fa19d42cSAndrey Albershteyn 		__field(ino_t, ino)
46*fa19d42cSAndrey Albershteyn 		__field(u64, data_size)
47*fa19d42cSAndrey Albershteyn 		__field(u64, tree_size)
48*fa19d42cSAndrey Albershteyn 		__field(unsigned int, merkle_block)
49*fa19d42cSAndrey Albershteyn 		__field(unsigned int, levels)
50*fa19d42cSAndrey Albershteyn 		__dynamic_array(u8, root_hash, params->digest_size)
51*fa19d42cSAndrey Albershteyn 		__dynamic_array(u8, file_digest, params->digest_size)
52*fa19d42cSAndrey Albershteyn 	),
53*fa19d42cSAndrey Albershteyn 	TP_fast_assign(
54*fa19d42cSAndrey Albershteyn 		__entry->ino = inode->i_ino;
55*fa19d42cSAndrey Albershteyn 		__entry->data_size = i_size_read(inode);
56*fa19d42cSAndrey Albershteyn 		__entry->tree_size = params->tree_size;
57*fa19d42cSAndrey Albershteyn 		__entry->merkle_block = params->block_size;
58*fa19d42cSAndrey Albershteyn 		__entry->levels = params->num_levels;
59*fa19d42cSAndrey Albershteyn 		memcpy(__get_dynamic_array(root_hash), vi->root_hash, __get_dynamic_array_len(root_hash));
60*fa19d42cSAndrey Albershteyn 		memcpy(__get_dynamic_array(file_digest), vi->file_digest, __get_dynamic_array_len(file_digest));
61*fa19d42cSAndrey Albershteyn 	),
62*fa19d42cSAndrey Albershteyn 	TP_printk("ino %lu data_size %llu tree_size %lld merkle_block %u levels %u root_hash %s digest %s",
63*fa19d42cSAndrey Albershteyn 		(unsigned long) __entry->ino,
64*fa19d42cSAndrey Albershteyn 		__entry->data_size,
65*fa19d42cSAndrey Albershteyn 		__entry->tree_size,
66*fa19d42cSAndrey Albershteyn 		__entry->merkle_block,
67*fa19d42cSAndrey Albershteyn 		__entry->levels,
68*fa19d42cSAndrey Albershteyn 		__print_hex_str(__get_dynamic_array(root_hash), __get_dynamic_array_len(root_hash)),
69*fa19d42cSAndrey Albershteyn 		__print_hex_str(__get_dynamic_array(file_digest), __get_dynamic_array_len(file_digest)))
70*fa19d42cSAndrey Albershteyn );
71*fa19d42cSAndrey Albershteyn 
72*fa19d42cSAndrey Albershteyn TRACE_EVENT(fsverity_verify_data_block,
73*fa19d42cSAndrey Albershteyn 	TP_PROTO(const struct inode *inode,
74*fa19d42cSAndrey Albershteyn 		 const struct merkle_tree_params *params,
75*fa19d42cSAndrey Albershteyn 		 u64 data_pos),
76*fa19d42cSAndrey Albershteyn 	TP_ARGS(inode, params, data_pos),
77*fa19d42cSAndrey Albershteyn 	TP_STRUCT__entry(
78*fa19d42cSAndrey Albershteyn 		__field(ino_t, ino)
79*fa19d42cSAndrey Albershteyn 		__field(u64, data_pos)
80*fa19d42cSAndrey Albershteyn 		__field(unsigned int, merkle_block)
81*fa19d42cSAndrey Albershteyn 	),
82*fa19d42cSAndrey Albershteyn 	TP_fast_assign(
83*fa19d42cSAndrey Albershteyn 		__entry->ino = inode->i_ino;
84*fa19d42cSAndrey Albershteyn 		__entry->data_pos = data_pos;
85*fa19d42cSAndrey Albershteyn 		__entry->merkle_block = params->block_size;
86*fa19d42cSAndrey Albershteyn 	),
87*fa19d42cSAndrey Albershteyn 	TP_printk("ino %lu data_pos %llu merkle_block %u",
88*fa19d42cSAndrey Albershteyn 		(unsigned long) __entry->ino,
89*fa19d42cSAndrey Albershteyn 		__entry->data_pos,
90*fa19d42cSAndrey Albershteyn 		__entry->merkle_block)
91*fa19d42cSAndrey Albershteyn );
92*fa19d42cSAndrey Albershteyn 
93*fa19d42cSAndrey Albershteyn TRACE_EVENT(fsverity_merkle_hit,
94*fa19d42cSAndrey Albershteyn 	TP_PROTO(const struct inode *inode, u64 data_pos,
95*fa19d42cSAndrey Albershteyn 		 unsigned long hblock_idx, unsigned int level,
96*fa19d42cSAndrey Albershteyn 		 unsigned int hidx),
97*fa19d42cSAndrey Albershteyn 	TP_ARGS(inode, data_pos, hblock_idx, level, hidx),
98*fa19d42cSAndrey Albershteyn 	TP_STRUCT__entry(
99*fa19d42cSAndrey Albershteyn 		__field(ino_t, ino)
100*fa19d42cSAndrey Albershteyn 		__field(u64, data_pos)
101*fa19d42cSAndrey Albershteyn 		__field(unsigned long, hblock_idx)
102*fa19d42cSAndrey Albershteyn 		__field(unsigned int, level)
103*fa19d42cSAndrey Albershteyn 		__field(unsigned int, hidx)
104*fa19d42cSAndrey Albershteyn 	),
105*fa19d42cSAndrey Albershteyn 	TP_fast_assign(
106*fa19d42cSAndrey Albershteyn 		__entry->ino = inode->i_ino;
107*fa19d42cSAndrey Albershteyn 		__entry->data_pos = data_pos;
108*fa19d42cSAndrey Albershteyn 		__entry->hblock_idx = hblock_idx;
109*fa19d42cSAndrey Albershteyn 		__entry->level = level;
110*fa19d42cSAndrey Albershteyn 		__entry->hidx = hidx;
111*fa19d42cSAndrey Albershteyn 	),
112*fa19d42cSAndrey Albershteyn 	TP_printk("ino %lu data_pos %llu hblock_idx %lu level %u hidx %u",
113*fa19d42cSAndrey Albershteyn 		(unsigned long) __entry->ino,
114*fa19d42cSAndrey Albershteyn 		__entry->data_pos,
115*fa19d42cSAndrey Albershteyn 		__entry->hblock_idx,
116*fa19d42cSAndrey Albershteyn 		__entry->level,
117*fa19d42cSAndrey Albershteyn 		__entry->hidx)
118*fa19d42cSAndrey Albershteyn );
119*fa19d42cSAndrey Albershteyn 
120*fa19d42cSAndrey Albershteyn TRACE_EVENT(fsverity_verify_merkle_block,
121*fa19d42cSAndrey Albershteyn 	TP_PROTO(const struct inode *inode, unsigned long hblock_idx,
122*fa19d42cSAndrey Albershteyn 		 unsigned int level, unsigned int hidx),
123*fa19d42cSAndrey Albershteyn 	TP_ARGS(inode, hblock_idx, level, hidx),
124*fa19d42cSAndrey Albershteyn 	TP_STRUCT__entry(
125*fa19d42cSAndrey Albershteyn 		__field(ino_t, ino)
126*fa19d42cSAndrey Albershteyn 		__field(unsigned long, hblock_idx)
127*fa19d42cSAndrey Albershteyn 		__field(unsigned int, level)
128*fa19d42cSAndrey Albershteyn 		__field(unsigned int, hidx)
129*fa19d42cSAndrey Albershteyn 	),
130*fa19d42cSAndrey Albershteyn 	TP_fast_assign(
131*fa19d42cSAndrey Albershteyn 		__entry->ino = inode->i_ino;
132*fa19d42cSAndrey Albershteyn 		__entry->hblock_idx = hblock_idx;
133*fa19d42cSAndrey Albershteyn 		__entry->level = level;
134*fa19d42cSAndrey Albershteyn 		__entry->hidx = hidx;
135*fa19d42cSAndrey Albershteyn 	),
136*fa19d42cSAndrey Albershteyn 	TP_printk("ino %lu hblock_idx %lu level %u hidx %u",
137*fa19d42cSAndrey Albershteyn 		(unsigned long) __entry->ino,
138*fa19d42cSAndrey Albershteyn 		__entry->hblock_idx,
139*fa19d42cSAndrey Albershteyn 		__entry->level,
140*fa19d42cSAndrey Albershteyn 		__entry->hidx)
141*fa19d42cSAndrey Albershteyn );
142*fa19d42cSAndrey Albershteyn 
143*fa19d42cSAndrey Albershteyn #endif /* _TRACE_FSVERITY_H */
144*fa19d42cSAndrey Albershteyn 
145*fa19d42cSAndrey Albershteyn /* This part must be outside protection */
146*fa19d42cSAndrey Albershteyn #include <trace/define_trace.h>
147