From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C4D930171A for ; Wed, 20 May 2026 19:06:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779303997; cv=none; b=RFgXe+IHC58rqhNu16q0e0lu/7swD6F3lXYXBYw1r3G3GfeYsg+UH1MKCPFtN6ogYDpKH7ghEtAJ2+PkILDK5C9kJF5EJ1D2SQZCWdq3GGTfkGeqy0Re5HPk58A6nKsyDY3Nzq4xmw4vlPhpjAa26+3i285tqlkJ7rZEf3kjivk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779303997; c=relaxed/simple; bh=ZRg61dON0KRc2qEP3tBaM7Zyct4U5agDVGrPlEx1QgQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hc0ncF1Wp642yQdPVbPSqvoCWMJva0deTg7zr7HWSm01WEYXJrqzfUDMLIvVvcb/uqvHwUKnAWRqIJ3LmqOxANKZbVcYTg3mPdTvhL6jSs/M7IyB34DsEJVzovZRur9OANDZN5hUnDipNwKu5bwhDiycoDfhBhW11eP9SlVbDtM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kP4+5Dsr; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kP4+5Dsr" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c829586e894so2699814a12.2 for ; Wed, 20 May 2026 12:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1779303996; x=1779908796; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=t3ZYk5fqvq7cU/2S9WHwTroDDw3rio9ewcApjvUks0A=; b=kP4+5DsrNRGQqrxBnvevXo4+6rBEPlOph/fbPKdBiA2HDdj8sFOd+zrALf7ILj20jR j0HEkEuZABWLgVzd3kTqEhAdBGLuUOs/P+fongtscRtgRdi/dANgqd9VtQqde9Z5tS+A ipQNNcl1QVnhf3aXvMV4eLuZ/RhEBu1k8CZAe0+eqIDxujOD/qImHON6B8F3bD8PEs5e 0v9fWl2NQernZZGdPX2pmPvZsOnAap+J3CQgnU+4ZK4PeQQwrRucko3Hftg+MWClTGUQ r642aBoDCsUIrSDFBAFKZBQdfs6UyctRmVHR9pc1gw/9xft+EpsBR6aT1q8sRBZ5v6E6 l7dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779303996; x=1779908796; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=t3ZYk5fqvq7cU/2S9WHwTroDDw3rio9ewcApjvUks0A=; b=hgiOdzBuvrd9hx+KyZw8NUOO2w5Jsxjub8QnLPe65UtSBZ5Nk5Exc0KdyFaFUhkAOM bDDT/dEEAF2UZyZcU3iCpKGvnyTTcpAgnFpJRIQ5pr17ssmEi9EKJlHLDqc8vKJA0sUb mqkLOLgHvz/JNanfgIFeVsxS4D086/8nB4aArLGF94gP3KhlTzJrnhMBAGtBEPUZxdJp v1ZQdk3R6WwsDqLF4XXx/T8RHSItVjHgnWwudw+4P8j/uCZ9igrCbIFX3I7Cse/RpZV3 WFyoYrMpqIzElLDRiYZQXpgq2c4bZyD8XLTwbpN4eDLq9qi4fMo+Ha8K+UJsFgqTC5Fq e8Eg== X-Forwarded-Encrypted: i=1; AFNElJ+68WGJIxT9LpTEPuAbEKp1Un/N96ptD6+JYOmh/sBRjMBY+yHBKRR9XvU0DHuhO9vr1Jrvt4ubOzOUuG4=@vger.kernel.org X-Gm-Message-State: AOJu0YxBT4IlGWZXufAFoZXT+BS/xIOOiG+C5ISlL+bzi/av4pv/HrNj kHkzNboX1ESjHb7vNWTaWTivURLTD4P1eeFhtCv0EsIzuHydSjK4z0r6CKRdSNp1nCIE58YkyW9 pPExlX9aOVg== X-Received: from pgjt2.prod.google.com ([2002:a63:f342:0:b0:c80:dc0a:9f7f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7349:b0:3a3:17f8:bedd with SMTP id adf61e73a8af0-3b22ea4f434mr27819932637.17.1779303995412; Wed, 20 May 2026 12:06:35 -0700 (PDT) Date: Wed, 20 May 2026 12:05:31 -0700 In-Reply-To: <20260520190538.142018-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260512223001.2952848-1-irogers@google.com> <20260520190538.142018-1-irogers@google.com> X-Mailer: git-send-email 2.54.0.746.g67dd491aae-goog Message-ID: <20260520190538.142018-26-irogers@google.com> Subject: [PATCH v14 25/32] perf kmem: Fix memory leaks on error path and when skipping From: Ian Rogers To: irogers@google.com, acme@kernel.org, namhyung@kernel.org Cc: adrian.hunter@intel.com, ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr, alexander.shishkin@linux.intel.com, anup@brainfault.org, aou@eecs.berkeley.edu, atrajeev@linux.ibm.com, blakejones@google.com, ctshao@google.com, dapeng1.mi@linux.intel.com, derek.foreman@collabora.com, dvyukov@google.com, howardchu95@gmail.com, hrishikesh123s@gmail.com, james.clark@linaro.org, jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com, leo.yan@arm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux@treblig.org, mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com, peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com, swapnil.sapkal@amd.com, tanze@kylinos.cn, thomas.falcon@intel.com, tianyou.li@intel.com, yujie.liu@intel.com, zhouquan@iscas.ac.cn Content-Type: text/plain; charset="UTF-8" Fix memory leaks on the error paths and skipped sample handling paths in the perf kmem tool. Ensure that all allocated GFP flags and thread references are properly freed and released via thread__put() when skipping samples or encountering parsing failures, preventing long-term memory usage leaks during large trace analyses. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/builtin-kmem.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 68a39f56204d..daf2272c7337 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c @@ -783,17 +783,21 @@ static int parse_gfp_flags(struct perf_sample *sample, unsigned int gfp_flags) new = realloc(gfps, (nr_gfps + 1) * sizeof(*gfps)); if (new == NULL) - return -ENOMEM; + goto err_out; gfps = new; - new += nr_gfps++; + new += nr_gfps; new->flags = gfp_flags; new->human_readable = strdup(str + 10); + if (!new->human_readable) + goto err_out; new->compact_str = compact_gfp_flags(str + 10); - if (!new->human_readable || !new->compact_str) - return -ENOMEM; - + if (!new->compact_str) { + free(new->human_readable); + goto err_out; + } + nr_gfps++; qsort(gfps, nr_gfps, sizeof(*gfps), gfpcmp); } @@ -802,6 +806,9 @@ static int parse_gfp_flags(struct perf_sample *sample, unsigned int gfp_flags) trace_seq_destroy(&seq); return 0; +err_out: + trace_seq_destroy(&seq); + return -ENOMEM; } static int evsel__process_page_alloc_event(struct perf_sample *sample) @@ -971,6 +978,7 @@ static int process_sample_event(const struct perf_tool *tool __maybe_unused, } if (perf_kmem__skip_sample(sample)) { + thread__put(thread); return 0; } -- 2.54.0.746.g67dd491aae-goog