perf/urgent fixes:

- Fix memory corruption in the annotation routines because of zero
   length symbols (asm ones) (Ravi Bangoria)
 
 - Fix printing garbage as an error message when re-running the
   lexer events matcher (Jiri Olsa)
 
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEELb9bqkb7Te0zijNb1lAW81NSqkAFAlnzhA0ACgkQ1lAW81NS
 qkBZgBAAjmYQr/TS/+sGhPOiUIw1YuXTwz1NFi1Xh/WKJ6081/3Da/yMTyfvO6pg
 AEfTkBoF7SJnMWa7WBJ/rB4/Q2eZUYa2nj4Rawek8j6y7BpbybTjETN2y6wjMNFL
 W+AoOe6UR/k9VO9YwC1aVeBsC/cyAQKf0zP7j73L4DndJ/HOjyx8LW5u1ZWq3cOV
 mzd0O7wTl5cs6zkLYhhf2/6eQJmdil7XZJXC+E8L+6v7tML+iLqz6dkmjY2HVgVe
 A9hCufe+PqB8S6fZN0SnoyIE1Xrlqof4ZgK+KoPsohUaPYEHt4xZlYMhgLU2/rAU
 YbFpMKO9TvSw23GzloYhdSjXJHDrZ+0zvaKLTLkLHN5rwbBosOMWR/NH7EivGZIa
 TRB9jD+yz+ziZkuEO+fE5I6j3ToxItkqBeov2cpsdvKUDo3mFKy6KJz6MD/4S9ND
 jTY8Ibk+MrOYEXglrF89tC5PYxHMEbLDkgTdvYUzvY6tDzfJG8xTn8bxwsjtXryK
 uOcM9OHHRM6R6ZT8dd6N+YU7waToStfaVliguQpsYFjb49bn1ILqjkrqBlyd7FyW
 Qe3YELpHjij0nPeum9dQzW2gDPMq2J6Zt0f3sNj1cz+k6eLAv+iypTmYKI6gLMrq
 bo2RkeBb2ZqfOs4aqqavsEIJrZG+a/n45aMTuNx7WwlWgyKfW+s=
 =XSDl
 -----END PGP SIGNATURE-----

Merge tag 'perf-urgent-for-mingo-4.14-20171027' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent

Pull perf/urgent fixes from Arnaldo Carvalho de Melo:

- Fix memory corruption in the annotation routines because of zero
  length symbols (asm ones) (Ravi Bangoria)

- Fix printing garbage as an error message when re-running the
  lexer events matcher (Jiri Olsa)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Ingo Molnar 2017-10-28 16:16:11 +02:00
commit 4139433c9a
2 changed files with 17 additions and 3 deletions

View File

@ -606,9 +606,19 @@ static struct arch *arch__find(const char *name)
int symbol__alloc_hist(struct symbol *sym)
{
struct annotation *notes = symbol__annotation(sym);
const size_t size = symbol__size(sym);
size_t size = symbol__size(sym);
size_t sizeof_sym_hist;
/*
* Add buffer of one element for zero length symbol.
* When sample is taken from first instruction of
* zero length symbol, perf still resolves it and
* shows symbol name in perf report and allows to
* annotate it.
*/
if (size == 0)
size = 1;
/* Check for overflow when calculating sizeof_sym_hist */
if (size > (SIZE_MAX - sizeof(struct sym_hist)) / sizeof(struct sym_hist_entry))
return -1;

View File

@ -154,6 +154,10 @@ do { \
yycolumn += yyleng; \
} while (0);
#define USER_REJECT \
yycolumn -= yyleng; \
REJECT
%}
%x mem
@ -335,8 +339,8 @@ r{num_raw_hex} { return raw(yyscanner); }
{num_hex} { return value(yyscanner, 16); }
{modifier_event} { return str(yyscanner, PE_MODIFIER_EVENT); }
{bpf_object} { if (!isbpf(yyscanner)) REJECT; return str(yyscanner, PE_BPF_OBJECT); }
{bpf_source} { if (!isbpf(yyscanner)) REJECT; return str(yyscanner, PE_BPF_SOURCE); }
{bpf_object} { if (!isbpf(yyscanner)) USER_REJECT; return str(yyscanner, PE_BPF_OBJECT); }
{bpf_source} { if (!isbpf(yyscanner)) USER_REJECT; return str(yyscanner, PE_BPF_SOURCE); }
{name} { return pmu_str_check(yyscanner); }
"/" { BEGIN(config); return '/'; }
- { return '-'; }