lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 5 Mar 2016 00:14:17 -0800 From: tip-bot for Jiri Olsa <tipbot@...or.com> To: linux-tip-commits@...r.kernel.org Cc: acme@...hat.com, hpa@...or.com, jolsa@...nel.org, a.p.zijlstra@...llo.nl, tglx@...utronix.de, dsahern@...il.com, namhyung@...nel.org, jolsa@...hat.com, linux-kernel@...r.kernel.org, mingo@...nel.org, mingo@...hat.com Subject: [tip:perf/core] perf tools: Fix locale handling in pmu parsing Commit-ID: f9a5978ac4ede901fa73d7c28ae1c5d89bc2a46a Gitweb: http://git.kernel.org/tip/f9a5978ac4ede901fa73d7c28ae1c5d89bc2a46a Author: Jiri Olsa <jolsa@...hat.com> AuthorDate: Thu, 3 Mar 2016 10:53:48 +0100 Committer: Arnaldo Carvalho de Melo <acme@...hat.com> CommitDate: Thu, 3 Mar 2016 11:04:54 -0300 perf tools: Fix locale handling in pmu parsing Ingo reported regression on display format of big numbers, which is missing separators (in default perf stat output). triton:~/tip> perf stat -a sleep 1 ... 127008602 cycles # 0.011 GHz 279538533 stalled-cycles-frontend # 220.09% frontend cycles idle 119213269 instructions # 0.94 insn per cycle This is caused by recent change: perf stat: Check existence of frontend/backed stalled cycles that added call to pmu_have_event, that subsequently calls perf_pmu__parse_scale, which has a bug in locale handling. The lc string returned from setlocale, that we use to store old locale value, may be allocated in static storage. Getting a dynamic copy to make it survive another setlocale call. $ perf stat ls ... 2,360,602 cycles # 3.080 GHz 2,703,090 instructions # 1.15 insn per cycle 546,031 branches # 712.511 M/sec Committer note: Since the patch introducing the regression didn't made to perf/core, move it to just before where the regression was introduced, so that we don't break bisection for this feature. Reported-by: Ingo Molnar <mingo@...hat.com> Signed-off-by: Jiri Olsa <jolsa@...nel.org> Tested-by: Arnaldo Carvalho de Melo <acme@...hat.com> Cc: David Ahern <dsahern@...il.com> Cc: Namhyung Kim <namhyung@...nel.org> Cc: Peter Zijlstra <a.p.zijlstra@...llo.nl> Link: http://lkml.kernel.org/r/20160303095348.GA24511@krava.redhat.com Signed-off-by: Arnaldo Carvalho de Melo <acme@...hat.com> --- tools/perf/util/pmu.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index ce61f79..d8cd038 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -124,6 +124,17 @@ static int perf_pmu__parse_scale(struct perf_pmu_alias *alias, char *dir, char * lc = setlocale(LC_NUMERIC, NULL); /* + * The lc string may be allocated in static storage, + * so get a dynamic copy to make it survive setlocale + * call below. + */ + lc = strdup(lc); + if (!lc) { + ret = -ENOMEM; + goto error; + } + + /* * force to C locale to ensure kernel * scale string is converted correctly. * kernel uses default C locale. @@ -135,6 +146,8 @@ static int perf_pmu__parse_scale(struct perf_pmu_alias *alias, char *dir, char * /* restore locale */ setlocale(LC_NUMERIC, lc); + free((char *) lc); + ret = 0; error: close(fd);
Powered by blists - more mailing lists