| From 3035c719dfbeb0a0961d951d6e26a17436ad59be Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 15 Jul 2021 18:07:19 +0200 |
| Subject: perf lzma: Close lzma stream on exit |
| |
| From: Riccardo Mancini <rickyman7@gmail.com> |
| |
| [ Upstream commit f8cbb0f926ae1e1fb5f9e51614e5437560ed4039 ] |
| |
| ASan reports memory leaks when running: |
| |
| # perf test "88: Check open filename arg using perf trace + vfs_getname" |
| |
| One of these is caused by the lzma stream never being closed inside |
| lzma_decompress_to_file(). |
| |
| This patch adds the missing lzma_end(). |
| |
| Signed-off-by: Riccardo Mancini <rickyman7@gmail.com> |
| Fixes: 80a32e5b498a7547 ("perf tools: Add lzma decompression support for kernel module") |
| Cc: Ian Rogers <irogers@google.com> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: http://lore.kernel.org/lkml/aaf50bdce7afe996cfc06e1bbb36e4a2a9b9db93.1626343282.git.rickyman7@gmail.com |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/perf/util/lzma.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| diff --git a/tools/perf/util/lzma.c b/tools/perf/util/lzma.c |
| index 39062df02629..51424cdc3b68 100644 |
| --- a/tools/perf/util/lzma.c |
| +++ b/tools/perf/util/lzma.c |
| @@ -69,7 +69,7 @@ int lzma_decompress_to_file(const char *input, int output_fd) |
| |
| if (ferror(infile)) { |
| pr_err("lzma: read error: %s\n", strerror(errno)); |
| - goto err_fclose; |
| + goto err_lzma_end; |
| } |
| |
| if (feof(infile)) |
| @@ -83,7 +83,7 @@ int lzma_decompress_to_file(const char *input, int output_fd) |
| |
| if (writen(output_fd, buf_out, write_size) != write_size) { |
| pr_err("lzma: write error: %s\n", strerror(errno)); |
| - goto err_fclose; |
| + goto err_lzma_end; |
| } |
| |
| strm.next_out = buf_out; |
| @@ -95,11 +95,13 @@ int lzma_decompress_to_file(const char *input, int output_fd) |
| break; |
| |
| pr_err("lzma: failed %s\n", lzma_strerror(ret)); |
| - goto err_fclose; |
| + goto err_lzma_end; |
| } |
| } |
| |
| err = 0; |
| +err_lzma_end: |
| + lzma_end(&strm); |
| err_fclose: |
| fclose(infile); |
| return err; |
| -- |
| 2.30.2 |
| |