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