tracing: Zero the pipe cpumask on alloc to avoid spurious -EBUSY
The pipe cpumask used to serialize opens between the main and percpu
trace pipes is not zeroed or initialized. This can result in
spurious -EBUSY returns if underlying memory is not fully zeroed.
This has been observed by immediate failure to read the main
trace_pipe file on an otherwise newly booted and idle system:
 # cat /sys/kernel/debug/tracing/trace_pipe
 cat: /sys/kernel/debug/tracing/trace_pipe: Device or resource busy
Zero the allocation of pipe_cpumask to avoid the problem.
Link: https://lore.kernel.org/linux-trace-kernel/20230831125500.986862-1-bfoster@redhat.com
Cc: stable@vger.kernel.org
Fixes: c2489bb7e6 ("tracing: Introduce pipe_cpumask to avoid race on trace_pipes")
Reviewed-by: Zheng Yejian <zhengyejian1@huawei.com>
Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Steven Rostedt (Google)
					
				
			
			
				
	
			
			
			
						parent
						
							2a30dbcbef
						
					
				
				
					commit
					3d07fa1dd1
				
			@@ -9474,7 +9474,7 @@ static struct trace_array *trace_array_create(const char *name)
 | 
			
		||||
	if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
 | 
			
		||||
		goto out_free_tr;
 | 
			
		||||
 | 
			
		||||
	if (!alloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL))
 | 
			
		||||
	if (!zalloc_cpumask_var(&tr->pipe_cpumask, GFP_KERNEL))
 | 
			
		||||
		goto out_free_tr;
 | 
			
		||||
 | 
			
		||||
	tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS;
 | 
			
		||||
@@ -10419,7 +10419,7 @@ __init static int tracer_alloc_buffers(void)
 | 
			
		||||
	if (trace_create_savedcmd() < 0)
 | 
			
		||||
		goto out_free_temp_buffer;
 | 
			
		||||
 | 
			
		||||
	if (!alloc_cpumask_var(&global_trace.pipe_cpumask, GFP_KERNEL))
 | 
			
		||||
	if (!zalloc_cpumask_var(&global_trace.pipe_cpumask, GFP_KERNEL))
 | 
			
		||||
		goto out_free_savedcmd;
 | 
			
		||||
 | 
			
		||||
	/* TODO: make the number of buffers hot pluggable with CPUS */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user