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