1414#include "kernel_trace.h"
1515
1616KPM_NAME ("kernel_trace" );
17- KPM_VERSION ("3.5 .0" );
17+ KPM_VERSION ("3.7 .0" );
1818KPM_LICENSE ("GPL v2" );
1919KPM_AUTHOR ("Test" );
2020KPM_DESCRIPTION ("use uprobe trace some fun in kpm" );
@@ -28,6 +28,8 @@ void (*path_put)(const struct path *path) = 0;
2828void (* rcu_read_unlock )(void ) = 0 ;
2929int (* trace_printk )(unsigned long ip , const char * fmt , ...) = 0 ;
3030
31+ int (* bpf_probe_read_user )(void * dst , u32 size ,const void __user * unsafe_ptr ) = 0 ;
32+
3133void * show_map_vma_addr ;
3234void * copy_insn_addr ;
3335
@@ -49,6 +51,7 @@ void before_copy_insn(hook_fargs5_t *args, void *udata){
4951 ins_info = search_key_value (& fix_ins_tree ,offset );
5052 if (ins_info ){
5153 memcpy ((void * )args -> arg2 ,ins_info -> value ,INS_LEN );
54+ // logkd("+Test-Log+ offset:%lx,fix ins:%x %x %x %x\n",offset,ins_info->value[0],ins_info->value[1],ins_info->value[2],ins_info->value[3]);
5255 args -> ret = 0 ;
5356 args -> skip_origin = 1 ;
5457 }
@@ -92,7 +95,7 @@ void before_mincore(hook_fargs3_t *args, void *udata){
9295 const char __user * tfun_name = (typeof (tfun_name ))syscall_argn (args , 2 );
9396 char fun_name [MAX_FUN_NAME ];
9497 compat_strncpy_from_user (fun_name ,tfun_name ,sizeof (fun_name ));
95- int insert_ret = insert_key_value (& fun_info_tree ,fun_offset ,fun_name );
98+ int insert_ret = insert_key_value (& fun_info_tree ,fun_offset ,fun_name , strlen ( fun_name ) );
9699 if (insert_ret == -1 ){
97100 logke ("+Test-Log+ same fun 0x%llx set uprobe\n" ,fun_offset );
98101 goto error_out ;
@@ -104,10 +107,10 @@ void before_mincore(hook_fargs3_t *args, void *udata){
104107 if (trace_info == FIX_ORI_INS ){
105108 unsigned long rfun_offset = (unsigned long )syscall_argn (args , 0 );
106109 const char __user * ufix_ins = (typeof (ufix_ins ))syscall_argn (args , 2 );
107- char fix_ins [INS_LEN * 2 ];
108- compat_strncpy_from_user (fix_ins ,ufix_ins , INS_LEN * 2 );
110+ char fix_ins [INS_LEN ];
111+ bpf_probe_read_user (fix_ins ,INS_LEN , ufix_ins );
109112// logkd("+Test-Log3+ insn:%lx %lx %lx %lx\n",fix_ins[0],fix_ins[1],fix_ins[2],fix_ins[3]);
110- int insert_ins_ret = insert_key_value (& fix_ins_tree ,rfun_offset ,fix_ins );
113+ int insert_ins_ret = insert_key_value (& fix_ins_tree ,rfun_offset ,fix_ins , INS_LEN );
111114 if (insert_ins_ret == -1 ){
112115 logke ("+Test-Log+ set insn for same fun 0x%llx\n" ,rfun_offset );
113116 goto error_out ;
@@ -125,7 +128,7 @@ void before_mincore(hook_fargs3_t *args, void *udata){
125128
126129 fun_offsets [hook_num ] = rfun_offset ;
127130 hook_num ++ ;
128- logkd ("+Test-Log+ rfun_offset:%llx\n" ,rfun_offset );
131+ // logkd("+Test-Log+ rfun_offset:%llx\n",rfun_offset);
129132 goto success_out ;
130133 }
131134
@@ -229,6 +232,7 @@ static long kernel_trace_init(const char *args, const char *event, void *__user
229232 kfree = (typeof (kfree ))kallsyms_lookup_name ("kfree" );
230233
231234 trace_printk = (typeof (trace_printk ))kallsyms_lookup_name ("__trace_printk" );
235+ bpf_probe_read_user = (typeof (bpf_probe_read_user ))kallsyms_lookup_name ("bpf_probe_read_user" );
232236
233237 show_map_vma_addr = (void * )kallsyms_lookup_name ("show_map_vma" );
234238
@@ -249,6 +253,7 @@ static long kernel_trace_init(const char *args, const char *event, void *__user
249253 logkd ("+Test-Log+ kfree:%llx\n" ,kfree );
250254
251255 logkd ("+Test-Log+ trace_printk:%llx\n" ,trace_printk );
256+ logkd ("+Test-Log+ bpf_probe_read_user:%llx\n" ,bpf_probe_read_user );
252257
253258 logkd ("+Test-Log+ show_map_vma_addr:%llx\n" ,show_map_vma_addr );
254259
@@ -257,7 +262,7 @@ static long kernel_trace_init(const char *args, const char *event, void *__user
257262 if (!(mtask_pid_nr_ns && uprobe_register && uprobe_unregister
258263 && kern_path && igrab && path_put && rcu_read_unlock
259264 && rb_erase && rb_insert_color && rb_first && trace_printk
260- && show_map_vma_addr && copy_insn_addr )){
265+ && bpf_probe_read_user && show_map_vma_addr && copy_insn_addr )){
261266 logke ("+Test-Log+ can not find some fun addr\n" );
262267 return -1 ;
263268 }
0 commit comments