From nobody Fri Oct 2 08:25:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C4B1403142; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; cv=none; b=H+e6g5tHQU0yQzbQLYlNSc4O9AzRjTI3RBJLWTnt3pTLj1TTiRuhX8a/erUqJwRyxpjq9SiZLeYz14nmH7hO1lc9/DcWVka/Ee8ubnrTunuqM8CT8/MeAJwmnAh7GBu89HWREn98uAjGu5tUZeSWTQFWHXAS+EjHMHdbxrV1i0c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; c=relaxed/simple; bh=D4oNQ6oqj39gKILMcLpB9mw/COd0/NB/PFjbdnNGxUo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f3/XosDXpj95RjDLCGQ1mTg9D+mWzONAylJqRZEC4dkvh+wHvTJ91xcAEQPc4J4Jdgrfg4wKBbzf88wtNpK7W5EaRGhqk2DPhW1xbzq+cTc6H1zXe9o4YAYm6+ksXpFZrtqrydQX93nXEucrELuYYXvU5FAKRTLxdTSD6gjxhzk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nAWSdPMW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nAWSdPMW" Received: by smtp.kernel.org (Postfix) with ESMTPS id 22B42C2BCF6; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1785762363; bh=D4oNQ6oqj39gKILMcLpB9mw/COd0/NB/PFjbdnNGxUo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=nAWSdPMW3Ri3LqCmn6P7JTAutCr1siBVKKW7LIhopivQkeliqThBHQLcY7NbfljwF 1biY80yhsU2HJV6cVl9RQp5EyYr7ZRcNZDAVtMk3M9QwEDgELQKZztXCRZptaE/PQV 95uzjSo4ABG2XtJr4FQkX61/gY4xrInlzOJMGMdWXAm0OCnqpPdDLWqfWgbZ11hnE5 h684nlqKZ1Jbl05MWgrUIXb/knwKQwBQTZ+PWYKJNdk+KFsfiKq8j6ZS3R0M/Mybz0 xH6qSPSEcBgoC2CySyAKiMh5uUfgqEeHifl5Gf2hjHOByYTXLpM2hbzRf2Xu4CP89G BaqLxBo1g9tTQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F4152C55184; Mon, 3 Aug 2026 13:06:02 +0000 (UTC) From: Michalis Niarchos via B4 Relay Date: Mon, 03 Aug 2026 15:05:40 +0200 Subject: [PATCH v2 1/4] perf tools: Fix memory leak in cmd_kvm() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260803-perf-kvm-fixes-v2-1-1b337189fffc@gmail.com> References: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> In-Reply-To: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Michalis Niarchos X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785762361; l=909; i=michael.niarchos@gmail.com; s=20260731; h=from:subject:message-id; bh=pkvE3n3gTEaq2KuDwi9uZbKHwl+KAztpvrJQ/tTLtCs=; b=bSQo6/zQqYRFtMeMXnJH1eHGDdpfTHATAGO0WNIJ9r70EmynCwmiQguMVd6unc0U5hHCatnZT mub6h/xB5vMAlPb74J5B53+o2SqRPl+gRzv2CQBWrLu3bwiX9KeEwTV X-Developer-Key: i=michael.niarchos@gmail.com; a=ed25519; pk=/LBZRQzfuxTnSaZhgZE8EP7mHr0poyqlKeFssNqkzFE= X-Endpoint-Received: by B4 Relay for michael.niarchos@gmail.com/20260731 with auth_id=912 X-Original-From: Michalis Niarchos Reply-To: michael.niarchos@gmail.com From: Michalis Niarchos filename may get allocated by get_filename_for_perf_kvm(), but is never freed. Use string literals to remove the need for freeing. Signed-off-by: Michalis Niarchos --- tools/perf/builtin-kvm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 394302ebdb16..44c6998f2ee5 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -606,11 +606,11 @@ static const char *get_filename_for_perf_kvm(void) const char *filename; =20 if (perf_host && !perf_guest) - filename =3D strdup("perf.data.host"); + filename =3D "perf.data.host"; else if (!perf_host && perf_guest) - filename =3D strdup("perf.data.guest"); + filename =3D "perf.data.guest"; else - filename =3D strdup("perf.data.kvm"); + filename =3D "perf.data.kvm"; =20 return filename; } --=20 2.55.0 From nobody Fri Oct 2 08:25:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C579403AF0; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; cv=none; b=UOgnCml0CC/cXaNHtWzTlPEfgV+VkM/w2F9oOgbRUH9JriZAySgUJOANvTYToxrfZsx4Rz9ZVayOI9SooZX+XwYdKAnRy5fr2NOFQZvZHIpwkH/d8scY8/mUHnrIgklocSuDAjjeE2TWd1Q8NXSXSqxoyh+bofoNNjO62c+owM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; c=relaxed/simple; bh=9y4LUF+bbsCRcc5va/yO6KlPxfcpaHDzeMpXdNvJF8g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ojGWTPSMUlK83pAe4QleKS/P/tp9bRyseBW2K+vCvCoElrbQaeV0IV45dd3mTJ9SKf73NvDQFoaWOCsz846gv91uPidqOSI6ELcnyWmF+dvLJespZLf/F+KoBZg41vCWBmVNSlc7K63aOl1jd5IZrDRkJBDPSTyNN6RSAdeg7Jc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e5gd+USz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="e5gd+USz" Received: by smtp.kernel.org (Postfix) with ESMTPS id 30AEAC2BCF4; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1785762363; bh=9y4LUF+bbsCRcc5va/yO6KlPxfcpaHDzeMpXdNvJF8g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=e5gd+USz+TPuxByKAxHpeDO5Zd7KGpqyL8rD6KESwdZ1IPNwmR0WgKbXrWS2uwTrI ykYa7UqWJwu8znMdg59gcHsl/OKIl1apqNE5ZjY2q7DN0Px55sJSLOLpxHgydsHyh4 TCpywl7PZBmdKAEkG0ZCTeX+pMiy1qzjzvyy76Qv0A9EvbCH77CSCRDqtc1A6lZA+b rrPktbpHf0+n/rhSct5IH51ntcqkOIG9w57CPmbXVbamL9P3okfZgrrXaK7eZmhumO OVRpXQ89ByXaAbiC3gRjHJA9wkbgsX5rmXwdLJoLT+n6rLxDGEbscJfHYCUnxXkvSb Hra5zJ36fV3Bw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 126EAC55182; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) From: Michalis Niarchos via B4 Relay Date: Mon, 03 Aug 2026 15:05:41 +0200 Subject: [PATCH v2 2/4] perf tools: Fix double free and memory leak in kvm_events_record() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260803-perf-kvm-fixes-v2-2-1b337189fffc@gmail.com> References: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> In-Reply-To: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Michalis Niarchos X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785762361; l=2074; i=michael.niarchos@gmail.com; s=20260731; h=from:subject:message-id; bh=O4wX5Z9XY/f99VY/L+7vtzDWIkAT23LI4gDz7eAJLVw=; b=AGVv+jzerEN8qKo06dvufUIJ+fTvE/22TkhBdPTa0G/RDASZSKG8MeBmjIcFKttgr1s72JDVU REleaOY68BmDwHxULGkwN3JCkCBZWEh1tySaV75zcaCZ9Kz7XqibSMu X-Developer-Key: i=michael.niarchos@gmail.com; a=ed25519; pk=/LBZRQzfuxTnSaZhgZE8EP7mHr0poyqlKeFssNqkzFE= X-Endpoint-Received: by B4 Relay for michael.niarchos@gmail.com/20260731 with auth_id=912 X-Original-From: Michalis Niarchos Reply-To: michael.niarchos@gmail.com From: Michalis Niarchos cmd_record() reorders the contents of the rec_argv pointer array, so its entry order no longer matches the order in which the caller originally allocated them. Freeing the contents of rec_argv by iterating the reordered array results in some pointers being freed twice and others never freed. All the entries of rec_argv come from literals or pointers that are valid for the lifetime of this call. Reference them directly instead of duplicating to remove the need to individually track and free each entry. Signed-off-by: Michalis Niarchos --- tools/perf/builtin-kvm.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 44c6998f2ee5..45c92ab74fdd 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1681,18 +1681,18 @@ kvm_events_record(struct perf_kvm_stat *kvm, int ar= gc, const char **argv) return -ENOMEM; =20 for (i =3D 0; i < ARRAY_SIZE(record_args); i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(record_args[i]); + rec_argv[i] =3D record_args[i]; =20 for (j =3D 0; j < events_tp_size; j++) { - rec_argv[i++] =3D STRDUP_FAIL_EXIT("-e"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm_events_tp(e_machine)[j]); + rec_argv[i++] =3D "-e"; + rec_argv[i++] =3D kvm_events_tp(e_machine)[j]; } =20 - rec_argv[i++] =3D STRDUP_FAIL_EXIT("-o"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm->file_name); + rec_argv[i++] =3D "-o"; + rec_argv[i++] =3D kvm->file_name; =20 for (j =3D 1; j < (unsigned int)argc; j++, i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); + rec_argv[i] =3D argv[j]; =20 set_option_flag(record_options, 'e', "event", PARSE_OPT_HIDDEN); set_option_flag(record_options, 0, "filter", PARSE_OPT_HIDDEN); @@ -1717,9 +1717,6 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , const char **argv) record_usage =3D kvm_stat_record_usage; ret =3D cmd_record(i, rec_argv); =20 -EXIT: - for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); free(rec_argv); return ret; } --=20 2.55.0 From nobody Fri Oct 2 08:25:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9521E409102; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; cv=none; b=uzx1UtLOwRNoC8SDpGFDXrwg9hwejcH9iLeEsGe3AXhn7l2INAYIIhEi5LpAmvN+XH2PH6qtN2n0FK7oOYsz+Lu0wK77J1sawz4KSeHBnd417zaccY8xUO2rV8JAsrhvhMXa896Td/f0KF/K0lKZm8asvgvSWYNdpZI8tysnehY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; c=relaxed/simple; bh=TWe0OFK7porf8g+khMEL63DGnOEpJVLYvbl4lIZaGs4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s+9j8lM4u8eDps97kzghKMCGooWaVAHUIPAK/32n1boDTXyI6ll1Udql1X9d1UbfF4WlP3EqFn9vhspwHSBP9FILN7KLR+B4EA7qTZ64i5mF8IMpR4edoW6Zn2D8Kcpdv3DSzBfYQXhW+IW98GGrsuCnIg4vIMZAWp0yO9UYuk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NNLyklV2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NNLyklV2" Received: by smtp.kernel.org (Postfix) with ESMTPS id 3FC87C2BCFC; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1785762363; bh=TWe0OFK7porf8g+khMEL63DGnOEpJVLYvbl4lIZaGs4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=NNLyklV2CirbZK0T66NS/RMBDNJfMJKNBYR4gUHz8swLtK+Q2xO1U0XwnN8xfD+KU +8VE4tfsXzUcz9wfqc2b/L9VWPyMFKcGf1lLaQ/k4IR2QXM6m5vImRkVzR7L09sl/o V5EHrm0MsxcP94w6EiziPGYWbse4rmquPIbIohKIGgdsgIMS+VRXaTxxaaZ9V4lD+h SgLblZAu4HW4z8DVEe+eBlfVw4JlGcbP7K9VbVYlDLlgdQGz8qMgK6/Vr8zIQ8tJlI U1y//UsAzYbNcefVbMU68uTNWEn85/A/BGtXhNTS6JgnnfMmAuh++z3kGku/3JtVpv zIejp/K+3qvKg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22FEAC55838; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) From: Michalis Niarchos via B4 Relay Date: Mon, 03 Aug 2026 15:05:42 +0200 Subject: [PATCH v2 3/4] perf tools: Fix memory leak in cmd_kvm() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260803-perf-kvm-fixes-v2-3-1b337189fffc@gmail.com> References: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> In-Reply-To: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Michalis Niarchos X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785762361; l=2755; i=michael.niarchos@gmail.com; s=20260731; h=from:subject:message-id; bh=HkNw5v8BoZZtsCQmPPshnIYOOv6PLxL6oX956SB8+Qk=; b=U7o4nEEy2TcRMK0E3t/qCT4uaSg9nA8hMKaUSgQGOtytMrRKFcv+4kb30hM4eGKB92QGestwF YwU7UEvJ61pDrzPP8q79Iptbk+oCNCKJVULlkq50tk42oWh3QIQP9y9 X-Developer-Key: i=michael.niarchos@gmail.com; a=ed25519; pk=/LBZRQzfuxTnSaZhgZE8EP7mHr0poyqlKeFssNqkzFE= X-Endpoint-Received: by B4 Relay for michael.niarchos@gmail.com/20260731 with auth_id=912 X-Original-From: Michalis Niarchos Reply-To: michael.niarchos@gmail.com From: Michalis Niarchos The usage string is allocated by parse_options_subcommand() and freed only on one return path. Using a single return point guarantees it is freed on all occasions. Signed-off-by: Michalis Niarchos --- tools/perf/builtin-kvm.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 45c92ab74fdd..9504c83e2074 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2142,6 +2142,7 @@ int cmd_kvm(int argc, const char **argv) const char *const kvm_subcommands[] =3D { "top", "record", "report", "dif= f", "buildid-list", "stat", NULL }; const char *kvm_usage[] =3D { NULL, NULL }; + int ret =3D 0; =20 exclude_GH_default =3D true; perf_host =3D 0; @@ -2155,34 +2156,37 @@ int cmd_kvm(int argc, const char **argv) if (!perf_host) perf_guest =3D 1; =20 - if (!file_name) { + if (!file_name) file_name =3D get_filename_for_perf_kvm(); =20 - if (!file_name) { - pr_err("Failed to allocate memory for filename\n"); - return -ENOMEM; - } + if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) { + ret =3D __cmd_record(file_name, argc, argv); + goto exit; + } else if (strlen(argv[0]) > 2 && strstarts("report", argv[0])) { + ret =3D __cmd_report(file_name, argc, argv); + goto exit; + } else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) { + ret =3D cmd_diff(argc, argv); + goto exit; + } else if (!strcmp(argv[0], "top")) { + ret =3D __cmd_top(argc, argv); + goto exit; + } else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) { + ret =3D __cmd_buildid_list(file_name, argc, argv); + goto exit; } - - if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) - return __cmd_record(file_name, argc, argv); - else if (strlen(argv[0]) > 2 && strstarts("report", argv[0])) - return __cmd_report(file_name, argc, argv); - else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) - return cmd_diff(argc, argv); - else if (!strcmp(argv[0], "top")) - return __cmd_top(argc, argv); - else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) - return __cmd_buildid_list(file_name, argc, argv); #if defined(HAVE_LIBTRACEEVENT) - else if (strlen(argv[0]) > 2 && strstarts("stat", argv[0])) - return kvm_cmd_stat(file_name, argc, argv); + else if (strlen(argv[0]) > 2 && strstarts("stat", argv[0])) { + ret =3D kvm_cmd_stat(file_name, argc, argv); + goto exit; + } #endif else usage_with_options(kvm_usage, kvm_options); =20 +exit: /* free usage string allocated by parse_options_subcommand */ free((void *)kvm_usage[0]); =20 - return 0; + return ret; } --=20 2.55.0 From nobody Fri Oct 2 08:25:15 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C616407CEF; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; cv=none; b=TKzDHXx7+640s31pKEGdI8eERvYO6HCC3rpmBYtCYhhBuF3LCLTqfOs7rLNkJpKbef1LQJm0uynULWZnhCLVK+aW+NuTta1Yk1miJGbUb5HX38HNkIrnZqyISez7lLBOKJGOk+LA0ObnwOln8AIeNs5uMjem0iOPOKWbbKZWNdc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785762363; c=relaxed/simple; bh=oDdJJMuKNO3H+bCiHiwxsjq3cEGataF07+cCdOiEYCU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s3ZX26s972ykpJq9+SqoCYriZbXRjsurRiIRoDI1XPG2jx1sxhQXasG/dWazP54mlt2IY/faP9eLJJGR+5vkp+iLY5OO+ZYUlUH+3ma+SpWtLPsKf6wZUAE3tEyTTf5Y5s3BchvmOvz4ii8VhD9kUbck1WlKnHgU7zf+btAMV0w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L2r1glEN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="L2r1glEN" Received: by smtp.kernel.org (Postfix) with ESMTPS id 43C3CC2BD01; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1785762363; bh=oDdJJMuKNO3H+bCiHiwxsjq3cEGataF07+cCdOiEYCU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=L2r1glENIz+k4brdSn2aPNfQsTxv2Gu5HUNveg4H3u10ENRX0q+ntIgtByOus49a7 VMKT8JfdyLPioYqm5Rbvt3JumwDajdfxW+IL7pjdyl+/cAWA5ogyPD+iT+tkryDBHU n9E9ouHrp/TQkI2pjTOuxdUAgj/WPb2414deWDz7H0Dv7+cTwGIGSwj/BLkHHXnwBY VHVj093SZlvUHsc8L+4ddVLY86EgTKQBuSbeNEN+MPmUrICouj66PNM6MyCNlGwLeh 3XYHLpM/imADrsTbU9xnCT2kmsNifrBx7CiMFAg+FZZ2Vh+L2mSflrZrpg8+tcqbA3 dBuGOaXqvrCrA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 33D7BC5518F; Mon, 3 Aug 2026 13:06:03 +0000 (UTC) From: Michalis Niarchos via B4 Relay Date: Mon, 03 Aug 2026 15:05:43 +0200 Subject: [PATCH v2 4/4] perf tools: Fix double frees and memory leaks in cmd_kvm() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260803-perf-kvm-fixes-v2-4-1b337189fffc@gmail.com> References: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> In-Reply-To: <20260803-perf-kvm-fixes-v2-0-1b337189fffc@gmail.com> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Michalis Niarchos X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785762361; l=4794; i=michael.niarchos@gmail.com; s=20260731; h=from:subject:message-id; bh=z6X3oSKhsyfdnOLkccB8N4HoUfze0laWnW5PzY5GJoA=; b=ymrMWY4X2sAw10OkaJmxwti/3Zhw+en9SfBnDjAtgfYlnUgANPBild2Zu6TnkbyqewrvpnwZn XS2I72ygwhDCNfMU91h2Aai4aSZHLfmMcsz0CYE5kfa3+a41x7YMPkG X-Developer-Key: i=michael.niarchos@gmail.com; a=ed25519; pk=/LBZRQzfuxTnSaZhgZE8EP7mHr0poyqlKeFssNqkzFE= X-Endpoint-Received: by B4 Relay for michael.niarchos@gmail.com/20260731 with auth_id=912 X-Original-From: Michalis Niarchos Reply-To: michael.niarchos@gmail.com From: Michalis Niarchos The involved functions follow the same pattern as kvm_events_record(). Signed-off-by: Michalis Niarchos --- tools/perf/builtin-kvm.c | 36 +++++++++-----------= ---- tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c | 4 +-- tools/perf/util/kvm-stat-arch/kvm-stat-x86.c | 10 ++----- 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 9504c83e2074..04cf9bd5b595 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2003,11 +2003,11 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) if (!rec_argv) return -ENOMEM; =20 - rec_argv[i++] =3D STRDUP_FAIL_EXIT("record"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT("-o"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); + rec_argv[i++] =3D "record"; + rec_argv[i++] =3D "-o"; + rec_argv[i++] =3D file_name; for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); + rec_argv[i] =3D argv[j]; =20 BUG_ON(i + 2 !=3D rec_argc); =20 @@ -2018,8 +2018,6 @@ static int __cmd_record(const char *file_name, int ar= gc, const char **argv) ret =3D cmd_record(i, rec_argv); =20 EXIT: - for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); free(rec_argv); return ret; } @@ -2034,19 +2032,16 @@ static int __cmd_report(const char *file_name, int = argc, const char **argv) if (!rec_argv) return -ENOMEM; =20 - rec_argv[i++] =3D STRDUP_FAIL_EXIT("report"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT("-i"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); + rec_argv[i++] =3D "report"; + rec_argv[i++] =3D "-i"; + rec_argv[i++] =3D file_name; for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); + rec_argv[i] =3D argv[j]; =20 BUG_ON(i !=3D rec_argc); =20 ret =3D cmd_report(i, rec_argv); =20 -EXIT: - for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); free(rec_argv); return ret; } @@ -2062,19 +2057,16 @@ __cmd_buildid_list(const char *file_name, int argc,= const char **argv) if (!rec_argv) return -ENOMEM; =20 - rec_argv[i++] =3D STRDUP_FAIL_EXIT("buildid-list"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT("-i"); - rec_argv[i++] =3D STRDUP_FAIL_EXIT(file_name); + rec_argv[i++] =3D "buildid-list"; + rec_argv[i++] =3D "-i"; + rec_argv[i++] =3D file_name; for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); + rec_argv[i] =3D argv[j]; =20 BUG_ON(i !=3D rec_argc); =20 ret =3D cmd_buildid_list(i, rec_argv); =20 -EXIT: - for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); free(rec_argv); return ret; } @@ -2094,7 +2086,7 @@ static int __cmd_top(int argc, const char **argv) return -ENOMEM; =20 for (i =3D 0; i < argc; i++) - rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[i]); + rec_argv[i] =3D argv[i]; =20 BUG_ON(i !=3D argc); =20 @@ -2105,8 +2097,6 @@ static int __cmd_top(int argc, const char **argv) ret =3D cmd_top(i, rec_argv); =20 EXIT: - for (i =3D 0; i < rec_argc; i++) - free((void *)rec_argv[i]); free(rec_argv); return ret; } diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c b/tools/perf/= util/kvm-stat-arch/kvm-stat-powerpc.c index 96d9c4ae0209..37f36c6bf895 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-powerpc.c @@ -196,8 +196,8 @@ int __kvm_add_default_arch_event_powerpc(int *argc, con= st char **argv) parse_options(j, tmp, event_options, NULL, PARSE_OPT_KEEP_UNKNOWN); if (!event) { if (perf_pmus__have_event("trace_imc", "trace_cycles")) { - argv[j++] =3D strdup("-e"); - argv[j++] =3D strdup("trace_imc/trace_cycles/"); + argv[j++] =3D "-e"; + argv[j++] =3D "trace_imc/trace_cycles/"; *argc +=3D 2; } else { free(tmp); diff --git a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c b/tools/perf/util= /kvm-stat-arch/kvm-stat-x86.c index 788d216f0852..67babdd3daf1 100644 --- a/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c +++ b/tools/perf/util/kvm-stat-arch/kvm-stat-x86.c @@ -213,7 +213,7 @@ int __kvm_add_default_arch_event_x86(int *argc, const c= har **argv) { const char **tmp; bool event =3D false; - int ret =3D 0, i, j =3D *argc; + int i, j =3D *argc; =20 const struct option event_options[] =3D { OPT_BOOLEAN('e', "event", &event, NULL), @@ -233,17 +233,13 @@ int __kvm_add_default_arch_event_x86(int *argc, const= char **argv) =20 parse_options(j, tmp, event_options, NULL, PARSE_OPT_KEEP_UNKNOWN); if (!event) { - argv[j++] =3D STRDUP_FAIL_EXIT("-e"); - argv[j++] =3D STRDUP_FAIL_EXIT("cycles"); + argv[j++] =3D "-e"; + argv[j++] =3D "cycles"; *argc +=3D 2; } =20 free(tmp); return 0; - -EXIT: - free(tmp); - return ret; } =20 const char * const *__kvm_events_tp_x86(void) --=20 2.55.0