On Sat, Nov 07, 2020 at 04:31:24PM -0800, Guenter Roeck wrote: > perf may fail to build in v4.19.y with the following error. > > util/evsel.c: In function ‘perf_evsel__exit’: > util/util.h:25:28: error: > passing argument 1 of ‘free’ discards ‘const’ qualifier from pointer target type > > This is observed (at least) with gcc v6.5.0. The underlying problem is > the following statement. > zfree(&evsel->pmu_name); > evsel->pmu_name is decared 'const *'. zfree in turn is defined as > #define zfree(ptr) ({ free(*ptr); *ptr = NULL; }) > and thus passes the const * to free(). The problem is not seen > in the upstream kernel since zfree() has been rewritten there. > > The problem has been introduced into v4.19.y with the backport of upstream > commit d4953f7ef1a2 (perf parse-events: Fix 3 use after frees found with > clang ASAN). > > One possible fix of this problem would be to not declare pmu_name > as const. This patch chooses to typecast the parameter of zfree() > to void *, following the guidance from the upstream kernel which > does the same since commit 7f7c536f23e6a ("tools lib: Adopt > zalloc()/zfree() from tools/perf") > > Fixes: a0100a363098 ("perf parse-events: Fix 3 use after frees found with clang ASAN") > Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx> > --- > This patch only applies to v4.19.y and has no upstream equivalent. > > tools/perf/util/util.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h > index dc58254a2b69..8c01b2cfdb1a 100644 > --- a/tools/perf/util/util.h > +++ b/tools/perf/util/util.h > @@ -22,7 +22,7 @@ static inline void *zalloc(size_t size) > return calloc(1, size); > } > > -#define zfree(ptr) ({ free(*ptr); *ptr = NULL; }) > +#define zfree(ptr) ({ free((void *)*ptr); *ptr = NULL; }) > > struct dirent; > struct nsinfo; > -- > 2.17.1 > Now queued up, thanks. greg k-h