mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	tracing: Do not (ab)use trace_seq in event_id_read()
event_id_read() has no reason to kmalloc "struct trace_seq" (more than PAGE_SIZE!), it can use a small buffer instead. Note: "if (*ppos) return 0" looks strange and even wrong, simple_read_from_buffer() handles ppos != 0 case corrrectly. And it seems that almost every user of trace_seq in this file should be converted too. Unless you use seq_open(), trace_seq buys nothing compared to the raw buffer, but it needs a bit more memory and code. Link: http://lkml.kernel.org/r/20130718184712.GA4786@redhat.com Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
		
							parent
							
								
									7710b63995
								
							
						
					
					
						commit
						cd458ba9d5
					
				
					 1 changed files with 4 additions and 13 deletions
				
			
		|  | @ -947,23 +947,14 @@ static ssize_t | ||||||
| event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) | event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) | ||||||
| { | { | ||||||
| 	struct ftrace_event_call *call = filp->private_data; | 	struct ftrace_event_call *call = filp->private_data; | ||||||
| 	struct trace_seq *s; | 	char buf[32]; | ||||||
| 	int r; | 	int len; | ||||||
| 
 | 
 | ||||||
| 	if (*ppos) | 	if (*ppos) | ||||||
| 		return 0; | 		return 0; | ||||||
| 
 | 
 | ||||||
| 	s = kmalloc(sizeof(*s), GFP_KERNEL); | 	len = sprintf(buf, "%d\n", call->event.type); | ||||||
| 	if (!s) | 	return simple_read_from_buffer(ubuf, cnt, ppos, buf, len); | ||||||
| 		return -ENOMEM; |  | ||||||
| 
 |  | ||||||
| 	trace_seq_init(s); |  | ||||||
| 	trace_seq_printf(s, "%d\n", call->event.type); |  | ||||||
| 
 |  | ||||||
| 	r = simple_read_from_buffer(ubuf, cnt, ppos, |  | ||||||
| 				    s->buffer, s->len); |  | ||||||
| 	kfree(s); |  | ||||||
| 	return r; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static ssize_t | static ssize_t | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Oleg Nesterov
						Oleg Nesterov