perf tools: Check $HOME/.perfconfig ownership
Commit-ID: 069e3725dd9be3b759a98e8c80ac5fc38b392b23 Gitweb: http://git.kernel.org/tip/069e3725dd9be3b759a98e8c80ac5fc38b392b23 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 9 Aug 2011 12:42:13 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 9 Aug 2011 12:42:13 -0300
perf tools: Check $HOME/.perfconfig ownership
Just like we do already for perf.data files.
Requested-by Ingo Molnar <[email protected]>
Cc Ben Hutchings <[email protected]>
Cc Christian Ohm <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jonathan Nieder <[email protected]>
Cc Mike Galbraith <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/config.c | 27 +++++++++++++++++++++++---- 1 files changed, 23 insertions(+), 4 deletions(-)
tools/perf/util/config.c +23 -4
@@ -413,13 +413,32 @@ int perf_config(config_fn_t fn, void *data) home =getenv ("HOME" );if (perf_config_global () && home) {char *user_config =strdup (mkpath ("%s/.perfconfig" , home)); -if (!access (user_config,R_OK )) { - ret +=perf_config_from_file (fn, user_config, data); - found +=1 ; +struct stat st; + +if (user_config ==NULL ) { +warning ("Not enough memory to process %s/.perfconfig, " +"ignoring it." , home); + goto out; + } + +if (stat (user_config, &st) <0 ) + goto out_free; + +if (st.st_uid && (st.st_uid !=geteuid ())) { +warning ("File %s not owned by current user or root, " +"ignoring it." , user_config); + goto out_free; } + +if (!st.st_size) + goto out_free; + + ret +=perf_config_from_file (fn, user_config, data); + found +=1 ; +out_free:free (user_config); } - +out:if (found ==0 )return -1 ;return ret;