perf annotate: Pass filename to objdump via execl
The symbol__disassemble() function uses shell to launch objdump and filter its output via grep. Passing filenames by interpolating them into the command line via "%s" may lead to problems if said filenames contain special characters. Instead, pass the filename as a command line argument where it is not subject to any kind of interpretation, then use quoted shell interpolation to build the strings we need safely. Signed-off-by: Ivan Krylov <krylov.r00t@gmail.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20181014111803.5d83b806@Tarkus Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									a3366db06b
								
							
						
					
					
						commit
						442b4eb3af
					
				@ -1723,15 +1723,14 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
 | 
			
		||||
	err = asprintf(&command,
 | 
			
		||||
		 "%s %s%s --start-address=0x%016" PRIx64
 | 
			
		||||
		 " --stop-address=0x%016" PRIx64
 | 
			
		||||
		 " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
 | 
			
		||||
		 " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand",
 | 
			
		||||
		 opts->objdump_path ?: "objdump",
 | 
			
		||||
		 opts->disassembler_style ? "-M " : "",
 | 
			
		||||
		 opts->disassembler_style ?: "",
 | 
			
		||||
		 map__rip_2objdump(map, sym->start),
 | 
			
		||||
		 map__rip_2objdump(map, sym->end),
 | 
			
		||||
		 opts->show_asm_raw ? "" : "--no-show-raw",
 | 
			
		||||
		 opts->annotate_src ? "-S" : "",
 | 
			
		||||
		 symfs_filename, symfs_filename);
 | 
			
		||||
		 opts->annotate_src ? "-S" : "");
 | 
			
		||||
 | 
			
		||||
	if (err < 0) {
 | 
			
		||||
		pr_err("Failure allocating memory for the command to run\n");
 | 
			
		||||
@ -1756,7 +1755,8 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args)
 | 
			
		||||
		close(stdout_fd[0]);
 | 
			
		||||
		dup2(stdout_fd[1], 1);
 | 
			
		||||
		close(stdout_fd[1]);
 | 
			
		||||
		execl("/bin/sh", "sh", "-c", command, NULL);
 | 
			
		||||
		execl("/bin/sh", "sh", "-c", command, "--", symfs_filename,
 | 
			
		||||
		      NULL);
 | 
			
		||||
		perror(command);
 | 
			
		||||
		exit(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user