diff options
Diffstat (limited to 'kernel/trace/ftrace.c')
| -rw-r--r-- | kernel/trace/ftrace.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 2e8a3fde7104..e6fb3e6e1ffc 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -1967,12 +1967,18 @@ static int ftrace_hash_ipmodify_update(struct ftrace_ops *ops,  static void print_ip_ins(const char *fmt, const unsigned char *p)  { +	char ins[MCOUNT_INSN_SIZE];  	int i; +	if (copy_from_kernel_nofault(ins, p, MCOUNT_INSN_SIZE)) { +		printk(KERN_CONT "%s[FAULT] %px\n", fmt, p); +		return; +	} +  	printk(KERN_CONT "%s", fmt);  	for (i = 0; i < MCOUNT_INSN_SIZE; i++) -		printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]); +		printk(KERN_CONT "%s%02x", i ? ":" : "", ins[i]);  }  enum ftrace_bug_type ftrace_bug_type; @@ -4206,8 +4212,7 @@ static void process_mod_list(struct list_head *head, struct ftrace_ops *ops,  		if (!func) /* warn? */  			continue; -		list_del(&ftrace_mod->list); -		list_add(&ftrace_mod->list, &process_mods); +		list_move(&ftrace_mod->list, &process_mods);  		/* Use the newly allocated func, as it may be "*" */  		kfree(ftrace_mod->func); | 
