File perf-jevents-fix-resource-leak-in-process_mapfile-and-main.patch of Package perf
104
1
From: Yunfeng Ye <yeyunfeng@huawei.com>
2
Date: Wed, 16 Oct 2019 21:50:17 +0800
3
Subject: perf jevents: Fix resource leak in process_mapfile() and main()
4
Git-commit: 1785fbb73896dbd9d27a406f0d73047df42db710
5
Patch-mainline: v5.5-rc1
6
References: git-fixes
7
8
There are memory leaks and file descriptor resource leaks in
9
process_mapfile() and main().
10
11
Fix this by adding free(), fclose() and free_arch_std_events() on the
12
error paths.
13
14
Fixes: 80eeb67fe577 ("perf jevents: Program to convert JSON file")
15
Fixes: 3f056b66647b ("perf jevents: Make build fail on JSON parse error")
16
Fixes: e9d32c1bf0cd ("perf vendor events: Add support for arch standard events")
17
Signed-off-by: Yunfeng Ye <yeyunfeng@huawei.com>
18
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
19
Cc: Andi Kleen <ak@linux.intel.com>
20
Cc: Feilong Lin <linfeilong@huawei.com>
21
Cc: Hu Shiyuan <hushiyuan@huawei.com>
22
Cc: Jiri Olsa <jolsa@redhat.com>
23
Cc: John Garry <john.garry@huawei.com>
24
Cc: Kan Liang <kan.liang@linux.intel.com>
25
Cc: Luke Mujica <lukemujica@google.com>
26
Cc: Mark Rutland <mark.rutland@arm.com>
27
Cc: Namhyung Kim <namhyung@kernel.org>
28
Cc: Peter Zijlstra <peterz@infradead.org>
29
Cc: Zenghui Yu <yuzenghui@huawei.com>
30
Link: http://lore.kernel.org/lkml/d7907042-ec9c-2bef-25b4-810e14602f89@huawei.com
31
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
32
Signed-off-by: Tony Jones <tonyj@suse.de>
33
---
34
tools/perf/pmu-events/jevents.c | 13 +++++++++++--
35
1 file changed, 11 insertions(+), 2 deletions(-)
36
37
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
38
index 7d69727f44bd..079c77b6a2fd 100644
39
--- a/tools/perf/pmu-events/jevents.c
40
+++ b/tools/perf/pmu-events/jevents.c
41
42
char *line, *p;
43
int line_num;
44
char *tblname;
45
+ int ret = 0;
46
47
pr_info("%s: Processing mapfile %s\n", prog, fpath);
48
49
50
if (!mapfp) {
51
pr_info("%s: Error %s opening %s\n", prog, strerror(errno),
52
fpath);
53
+ free(line);
54
return -1;
55
}
56
57
58
/* TODO Deal with lines longer than 16K */
59
pr_info("%s: Mapfile %s: line %d too long, aborting\n",
60
prog, fpath, line_num);
61
- return -1;
62
+ ret = -1;
63
+ goto out;
64
}
65
line[strlen(line)-1] = '\0';
66
67
68
69
out:
70
print_mapping_table_suffix(outfp);
71
- return 0;
72
+ fclose(mapfp);
73
+ free(line);
74
+ return ret;
75
}
76
77
/*
78
79
goto empty_map;
80
} else if (rc < 0) {
81
/* Make build fail */
82
+ fclose(eventsfp);
83
free_arch_std_events();
84
return 1;
85
} else if (rc) {
86
87
goto empty_map;
88
} else if (rc < 0) {
89
/* Make build fail */
90
+ fclose(eventsfp);
91
free_arch_std_events();
92
return 1;
93
} else if (rc) {
94
95
if (process_mapfile(eventsfp, mapfile)) {
96
pr_info("%s: Error processing mapfile %s\n", prog, mapfile);
97
/* Make build fail */
98
+ fclose(eventsfp);
99
+ free_arch_std_events();
100
return 1;
101
}
102
103
104