From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 622D6EB64D0 for ; Tue, 13 Jun 2023 19:16:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229806AbjFMTQu (ORCPT ); Tue, 13 Jun 2023 15:16:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230322AbjFMTQt (ORCPT ); Tue, 13 Jun 2023 15:16:49 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 299FB122 for ; Tue, 13 Jun 2023 12:16:48 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-565d1b86a64so76950877b3.3 for ; Tue, 13 Jun 2023 12:16:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686683807; x=1689275807; h=to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=5I02Mxr8dEB2Fb/343TSS1xBJ+pa6R95MYlZ68AlcGA=; b=6iM1g2V9GAkT4U8h/tzhArE5k9Yifetlf+FlODL6ab+YQJCBWSX9I/F/nlM2c5033p 6cU/fw6PIWGvlyuc+m2QsTNLsiQtkceOpqkTmJMPqXfAldJV7TVoL1bw+QJAQeOObKqp O6hS0tHGW1fVuBsqTzQjveswh3FMPoq10dV8O7x7Wh6wYxGWATcoLbynK0livHk8TOhj n5Wi3Mr2dnzAsWgc60yUuQTf6btWXAhWeNocjbyaBT/wnLcf14zjfaa2iCOBpF0gdGUe 1W5VhdxWNNgEni6zGzEnQACYIz65hAoD5u1rxUQG6rI+ETsH2/MgyezAq65623WtdDVr SMqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686683807; x=1689275807; h=to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=5I02Mxr8dEB2Fb/343TSS1xBJ+pa6R95MYlZ68AlcGA=; b=dDRVikIHDWMf9t/3JVNekla40/2SI2zijvYgeTTfGa5Lz3qDprgTjRCePQL9s7ZEnq ficXszHu3vxSRA3pZKzsmcDo++x3j6r2Q0bYKnVbUmkF/B27noanWnqxKsFrAiltWiv6 SFt/wLH9XrmZU+zu8JgrwLi+C0QG1USCD2EM8sYv0oKtiuUxlUMqrYubFVhcSdgiyQ8t E6DjZI+QZ62Xow9KClW234pR0K4DlMysUlOedjuKQw/BJdPUaaquetXcoTciFT2BRu/4 IRV1f30BnjvjdoT+zTrzGCBUJ6PZ0GfJuhZiZyPgZmhGNsPB38qi+BJHhwM8UvLhuNLK hqSA== X-Gm-Message-State: AC+VfDxicpcvOuF/dc+y/ZeQx5WzrqCLzofckM+Xk96WKHbL+yMXDXVO coq1gGaO/9I1ZPtKlDoIJnYxpSH6WAxx X-Google-Smtp-Source: ACHHUZ7X6K8DA/1fzwdBW/Rnk8QVBeGKLKagCC3TlSFf4YVjLObHwYf6u2SdQactQSWQ33qRDRQpFO/kXBHm X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:a704:56d6:f79d:33e7]) (user=irogers job=sendgmr) by 2002:a81:c905:0:b0:56f:f65f:53e5 with SMTP id o5-20020a81c905000000b0056ff65f53e5mr612110ywi.4.1686683807408; Tue, 13 Jun 2023 12:16:47 -0700 (PDT) Date: Tue, 13 Jun 2023 12:16:38 -0700 Message-Id: <20230613191639.1547925-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.41.0.162.gfafddb0af9-goog Subject: [RFC PATCH] perf util: asprintf helper for leak sanitizer From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org asprintf is a source of memory leaks but produces bad stack traces on my Debian linux. This patch adds a simple asprintf implementation to util.c that works around it. Before output: ``` ==1541752==ERROR: LeakSanitizer: detected memory leaks Direct leak of 10 byte(s) in 1 object(s) allocated from: #0 0x7f90c76b89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69 #1 0x7f90c649d2c7 in __vasprintf_internal libio/vasprintf.c:71 #2 0x55ad9b79afbf (/tmp/perf/perf+0x850fbf) SUMMARY: AddressSanitizer: 10 byte(s) leaked in 1 allocation(s). ``` After output: ``` ==1545918==ERROR: LeakSanitizer: detected memory leaks Direct leak of 10 byte(s) in 1 object(s) allocated from: #0 0x7f2755a7077b in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:439 #1 0x564986a8df31 in asprintf util/util.c:566 #2 0x5649869b5901 in metricgroup__lookup_default_metricgroup util/metricgroup.c:1520 #3 0x5649869b5e57 in metricgroup__lookup_create util/metricgroup.c:1579 #4 0x5649869b6ddc in parse_groups util/metricgroup.c:1698 #5 0x5649869b7714 in metricgroup__parse_groups util/metricgroup.c:1771 #6 0x5649867da9d5 in add_default_attributes tools/perf/builtin-stat.c:2164 #7 0x5649867ddbfb in cmd_stat tools/perf/builtin-stat.c:2707 #8 0x5649868fa5a2 in run_builtin tools/perf/perf.c:323 #9 0x5649868fab13 in handle_internal_command tools/perf/perf.c:377 #10 0x5649868faedb in run_argv tools/perf/perf.c:421 #11 0x5649868fb443 in main tools/perf/perf.c:537 #12 0x7f2754846189 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 SUMMARY: AddressSanitizer: 10 byte(s) leaked in 1 allocation(s). ``` RFC: is this useful for others? Should we have a build flag for it? --- tools/perf/util/util.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index c1fd9ba6d697..57eb528c5fed 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c @@ -552,3 +552,22 @@ int sched_getcpu(void) return -1; } #endif + +int asprintf(char **restrict strp, const char *restrict fmt, ...) +{ + char buf[1024]; + va_list ap; + int size; + char *result; + + va_start(ap, fmt); + size = vsnprintf(buf, sizeof(buf), fmt, ap); + if (size < (int)sizeof(buf)) + result = strdup(buf); + else + size = vasprintf(&result, fmt, ap); + + *strp = result; + va_end(ap); + return size; +} -- 2.41.0.162.gfafddb0af9-goog