From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 D79E4253954; Fri, 19 Sep 2025 02:18:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248320; cv=none; b=Er9VPYDytcNe6bpGWGYQ0JRpHX8XawZhM2Z+AxZav+DS/MaVMIv1NiP4ysnyiveQUOX7a7GNcWVIOG0XKkEZW2aMqXZzUm7W/R0ITpXZAXJKKQWT+RDupG12DXdTBN17A/ZLSgBs+9p03st/ypCrFpxyfhVL+Na+QFGb/9VAfuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248320; c=relaxed/simple; bh=QzGVMe3lVcb6ZKSoThxuJl4/bhzkFS08LPC0B3BFTeY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mZmZuyc7m0R5dS8jX5341Plq6FIUY2C43OV9rraW266P+kljU3dWhA5Xtx2DRW/zLaf70xa99/r6L35p+kTYsZFKT4peIuzdXdQXIQm/jFqWC90Uyctz24hjVd5JZoa3+h/AJRegAmGUDxx0cHeN7YE68Bcn8Ldh9JWqXJUkZsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=ZMiXlqzD; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="ZMiXlqzD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248319; x=1789784319; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QzGVMe3lVcb6ZKSoThxuJl4/bhzkFS08LPC0B3BFTeY=; b=ZMiXlqzDzVT5yCdjhQAQ8BBgBLwBymR9P8n2XP3phIVADT+XePDvle+E t00NyONmDfg7DYRyNm+gVVrAOLbBEcielsD+WqoHxPFJ6CO3FLAIsXQRq axPm26L+8SPULY7O+3jpGzMfy03GLo3q6d63BpDGnIH6Rj0WgY2MX+CTp icUt6vFlS48wdbZq1+N5g6/a0vyW9E4ukNLUJzLAVCgQ/o/3TqfHnwLr6 hVKXiPRbm8joF1aRRsinDDFmzjs+1tzYf5+C4JJaHp+OKHG3/+Nw2OeqL VHSnegfQTDUe0YgQxJUk6BoX19JY4yWAN/V1traK3c8zelmGfLGwwyd8b w==; X-CSE-ConnectionGUID: E6f1qkxZRJiY2bkfm7vksQ== X-CSE-MsgGUID: LCwIImJXQX2UWI0di1eI/w== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229117" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229117" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:39 -0700 X-CSE-ConnectionGUID: dyjLt5DLTZ61QucRBtcUXw== X-CSE-MsgGUID: LiT31gXXRbiqLqGqxHQmyA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535596" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:36 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v3 1/6] perf tools kvm: Add missed memory allocation check and free Date: Fri, 19 Sep 2025 10:16:54 +0800 Message-Id: <20250919021659.1263351-2-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Current code allocates rec_argv[] array, but doesn't check if the allocation is successful and explicitly free the rec_argv[] array. Add them back. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 81 ++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 23 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 7b15b4a705e4..9813f1eb56f9 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1638,9 +1638,11 @@ static int kvm_events_report_vcpu(struct perf_kvm_st= at *kvm) =20 #define STRDUP_FAIL_EXIT(s) \ ({ char *_p; \ - _p =3D strdup(s); \ - if (!_p) \ - return -ENOMEM; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ _p; \ }) =20 @@ -1688,7 +1690,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , const char **argv) rec_argv[i] =3D STRDUP_FAIL_EXIT(record_args[i]); =20 for (j =3D 0; j < events_tp_size; j++) { - rec_argv[i++] =3D "-e"; + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-e"); rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm_events_tp[j]); } =20 @@ -1696,7 +1698,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc= , const char **argv) rec_argv[i++] =3D STRDUP_FAIL_EXIT(kvm->file_name); =20 for (j =3D 1; j < (unsigned int)argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 set_option_flag(record_options, 'e', "event", PARSE_OPT_HIDDEN); set_option_flag(record_options, 0, "filter", PARSE_OPT_HIDDEN); @@ -1719,7 +1721,13 @@ kvm_events_record(struct perf_kvm_stat *kvm, int arg= c, const char **argv) set_option_flag(record_options, 0, "transaction", PARSE_OPT_DISABLED); =20 record_usage =3D kvm_stat_record_usage; - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int @@ -2006,52 +2014,79 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("record"); - rec_argv[i++] =3D strdup("-o"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + 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); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int __cmd_report(const char *file_name, int argc, const char **argv) { - int rec_argc, i =3D 0, j; + int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("report"); - rec_argv[i++] =3D strdup("-i"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + 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); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_report(i, rec_argv); + ret =3D cmd_report(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 static int __cmd_buildid_list(const char *file_name, int argc, const char **argv) { - int rec_argc, i =3D 0, j; + int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 rec_argc =3D argc + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); - rec_argv[i++] =3D strdup("buildid-list"); - rec_argv[i++] =3D strdup("-i"); - rec_argv[i++] =3D strdup(file_name); + if (!rec_argv) + return -ENOMEM; + + 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); for (j =3D 1; j < argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 - return cmd_buildid_list(i, rec_argv); + ret =3D cmd_buildid_list(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 int cmd_kvm(int argc, const char **argv) --=20 2.34.1 From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 4CB5E25A626; Fri, 19 Sep 2025 02:18:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248323; cv=none; b=rdrMbxfJCESvYPQstPZwMb5++3woDprh2cGposLN3J+i1DLNvetMPiBR25TlaMXDzhxN5M6Ipb4QZqzJUsBNY7EfBOL7h1PHFj8YApe4DJaV34zPRAHHH9c+5s8oIu6h0NKzQqqzOtQpwA1y/KkMUwA+CKDB8EU1XOr7EiY62p4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248323; c=relaxed/simple; bh=5otLIvgribi/H89sXWTHdrjVv3hyG9Xes4ulCNTnrO0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VUC5lAYGC603jmLIVY2BREqHKkaTnxQQXp0FqY8aa7h5ngrkMr0eOKhPnwBxWeG3WuNazE2hVrNDqHl7+UXfLxoXB3KV3Sz+/A9AhicODYEle+lhXogyeRNfxRKgSjYTDoQ2m7vuSF6exH5LtGfcMcxfSerfQH9NqtYUqXmCsBY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=k6DlzQGh; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="k6DlzQGh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248323; x=1789784323; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5otLIvgribi/H89sXWTHdrjVv3hyG9Xes4ulCNTnrO0=; b=k6DlzQGhrYyxyXmXQqHKCNPTPgnZlAZNpDwBAaP/ONmISlRDW9Y8acIy /by/pytffVCb0H+rjj32ItBef4AYVDYJQb82Mj3txF/jusk+nEE1gImkm iOeI/nbYDYVT6whlB9Eu5L2Se+EN3/CozFuqZL1cOwOx2DPv8t0fJdwXW tCc3lF+1qPvnuYuGvBeMKp50zPUcFCZhLLTJYI8UJy2bh+zWLe0GutI8v RJjLIhtam348G2emEOBCjHdGix7+ruLfObjRW8HvoUlW2fPHkvH5kHZSr SXR+bWOqlvJm2sznQUG7ivr7a8EhROyL+HT6PInxWmzoMRuPTrckqIJiz A==; X-CSE-ConnectionGUID: XvSXJDGbTFS3vzQXzUsN8Q== X-CSE-MsgGUID: WyG/0SlUTIeYt+9pF/TRRg== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229125" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229125" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:42 -0700 X-CSE-ConnectionGUID: uLM+hOqASY+4McPPOpqRqg== X-CSE-MsgGUID: q5Bt265+Rq64lIId70jYrA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535604" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:39 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v3 2/6] perf tools kwork: Add missed memory allocation check and free Date: Fri, 19 Sep 2025 10:16:55 +0800 Message-Id: <20250919021659.1263351-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Same with previous builtin-kvm code, perf_kwork__record() doesn't check the memory allocation and explicitly free the allocated memory. Just fix it. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kwork.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index d2e08de5976d..7f3068264568 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -2273,12 +2273,23 @@ static void setup_event_list(struct perf_kwork *kwo= rk, pr_debug("\n"); } =20 +#define STRDUP_FAIL_EXIT(s) \ + ({ char *_p; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ + _p; \ + }) + static int perf_kwork__record(struct perf_kwork *kwork, int argc, const char **argv) { const char **rec_argv; unsigned int rec_argc, i, j; struct kwork_class *class; + int ret; =20 const char *const record_args[] =3D { "record", @@ -2298,17 +2309,17 @@ static int perf_kwork__record(struct perf_kwork *kw= ork, return -ENOMEM; =20 for (i =3D 0; i < ARRAY_SIZE(record_args); i++) - rec_argv[i] =3D strdup(record_args[i]); + rec_argv[i] =3D STRDUP_FAIL_EXIT(record_args[i]); =20 list_for_each_entry(class, &kwork->class_list, list) { for (j =3D 0; j < class->nr_tracepoints; j++) { - rec_argv[i++] =3D strdup("-e"); - rec_argv[i++] =3D strdup(class->tp_handlers[j].name); + rec_argv[i++] =3D STRDUP_FAIL_EXIT("-e"); + rec_argv[i++] =3D STRDUP_FAIL_EXIT(class->tp_handlers[j].name); } } =20 for (j =3D 1; j < (unsigned int)argc; j++, i++) - rec_argv[i] =3D argv[j]; + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[j]); =20 BUG_ON(i !=3D rec_argc); =20 @@ -2317,7 +2328,13 @@ static int perf_kwork__record(struct perf_kwork *kwo= rk, pr_debug("%s ", rec_argv[j]); pr_debug("\n"); =20 - return cmd_record(i, rec_argv); + ret =3D cmd_record(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; } =20 int cmd_kwork(int argc, const char **argv) --=20 2.34.1 From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 9ACBB2609FD; Fri, 19 Sep 2025 02:18:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248327; cv=none; b=gxjfnXpSXpKEpMrumnK9rjmiiNY2/LWgCX/Vby/qUwSkEcO8upGOwg0A1PAA1PNs8yd/AlXVS5PBVeAj4AkEe1La2hgzGre9qpwk3SKbnXfOh+62jdVGLVZER/lZI4NtuuLDFTyEOXe2KZFUgV6oRb3gJxLPxBK/PBzPdJiD4X0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248327; c=relaxed/simple; bh=7sV5XXyfT80UuU5FmYPw9Nla94sjvOftHHNsNDMlRp4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VmOaBmW4liLuCWv2bZ1sZbB6U/xB507+W9oSbx1BaAz0FehRw0x2gis/w1LWbrOih4iaCvCb3QzENHqWST1SGx9NpPbwU/RGxa1PRyzE4qbPeTVTYefJRPbz/fnLENdrGas0RzPVEcH2FX2V0QAqq1XLiYtI9ZkZMBjDZclbqMY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=aGcrvTxr; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="aGcrvTxr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248326; x=1789784326; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7sV5XXyfT80UuU5FmYPw9Nla94sjvOftHHNsNDMlRp4=; b=aGcrvTxrZt7ZmX5S3+F7ZWc5SNKkpCE7m4Z/NixACWHTDapR9ItW4al9 WT9VKmZ5NrmugAeMMyKjATIkLRTuhVgPpUS3XBtrqxfDhYd0KlrtRYaZB DjAR9cwZSxyo9yHib8Ia/jw4+THao2l/5d3vIfapSVayxN+pcu0XXD8sH ufs2hx94QtOfQmRPrvszQIURYXVZT/WGHouIwWwrOjR4P/1+6VFRMUWMt bqkeb5vejAwH23sc7zCQjKr7lCTDf3DQMT872+ngP1L5xR13PenAz8KBm wWtj/6iR0wSm5ACiEdXreeQ7WYjSE6+SCb25TVLUfGo0ky+MMo93/j0Pq g==; X-CSE-ConnectionGUID: kVDZyx5AR/q1LTtBYZuppQ== X-CSE-MsgGUID: mnB1qvmTQ3689V9OSh5JVQ== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229135" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229135" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:46 -0700 X-CSE-ConnectionGUID: rpwfj2WJT2KRq4hiS2k6xA== X-CSE-MsgGUID: goVEWOQaQVSZArptzNHeUw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535610" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:43 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v3 3/6] perf tools kvm: Fix the potential out of range memory access issue Date: Fri, 19 Sep 2025 10:16:56 +0800 Message-Id: <20250919021659.1263351-4-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" kvm_add_default_arch_event() helper may add 2 extra options but it directly modifies the original argv[] array. This may cause out of range memory access. Fix this issue. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 9813f1eb56f9..d297a7b2c088 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2008,11 +2008,12 @@ static int __cmd_record(const char *file_name, int = argc, const char **argv) int rec_argc, i =3D 0, j, ret; const char **rec_argv; =20 - ret =3D kvm_add_default_arch_event(&argc, argv); - if (ret) - return -EINVAL; - - rec_argc =3D argc + 2; + /* + * Besides the 2 more options "-o" and "filename", + * kvm_add_default_arch_event() may add 2 extra options, + * so allocate 4 more items. + */ + rec_argc =3D argc + 2 + 2; rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); if (!rec_argv) return -ENOMEM; @@ -2025,6 +2026,10 @@ static int __cmd_record(const char *file_name, int a= rgc, const char **argv) =20 BUG_ON(i !=3D rec_argc); =20 + ret =3D kvm_add_default_arch_event(&i, rec_argv); + if (ret) + goto EXIT; + ret =3D cmd_record(i, rec_argv); =20 EXIT: --=20 2.34.1 From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 E163D2652BD; Fri, 19 Sep 2025 02:18:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248330; cv=none; b=hi6SN/i9nwsrk6PjkIX7w2BslMOM/66ktqSwQ/Hw79VmOG5TihDiN3hWsVBzJKhZhiq1vzfSQNfdwxguut/wN6rjwD4z8WLoOeYvgrOObbLIkf1XlYgfb7bGJGWpQP1aWQEJD5K8MlYry4fTU8ixwen2Y5o32x+RiWUCVsUHwIg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248330; c=relaxed/simple; bh=YCyw+MCUJeOwbPXfy98u/OedlbkyV/P1BIosFFp1ZOY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mL+t3b4+6sKTEiZFDh2cOnF/6C0rCYmYUDcUq8jnXQRoZVq0Oh77em2vix/emNTmkKWbXTwiXiUGkXf7o/zikbXTdHCb2+sUY9GNLNYO2glCu7e1fe0DuOgZSaxD5jVznYDO1bE05U+fQ1ippo4MpGM5xuwQ0axJhJ1f+RxPDUc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=im8tz6KN; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="im8tz6KN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248329; x=1789784329; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YCyw+MCUJeOwbPXfy98u/OedlbkyV/P1BIosFFp1ZOY=; b=im8tz6KNgzxUF/UEqAIIx9vNNwQSmlgLypTmAj+Triqv7k76lEIeGnlR 1XQGSQHhoXxQwkmJdUsLiFhtW06ACAIDmbAUqe600LOfvn/guiPnAY4Ef PupV6NAATKquFxN5YMn5E4sQbsxJbWjJKoQcMa+Jl3DlideRdE9+TIi9g D2vSjmZZJGY2lHlz9hjZt/GICk53CaacVYvx3K+HAGRDDUsZ7P7W9gEim 70PgwTusvyBezb8SLLlxLZF+zuz8gBtXuQDq+W3bzDByPA07//RY+EkcS H0IIt6sAvXi0QE82Quq4MHw3W29GQMgwdyDibhHNB3+zw4U/g9aGioV1H g==; X-CSE-ConnectionGUID: 5ydtPhR7SwaURCWXsZg7ig== X-CSE-MsgGUID: pJga5NhCSnqx8nNyqa3NpA== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229145" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229145" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:49 -0700 X-CSE-ConnectionGUID: UZbSKKBhQ3q8FzWgukufKA== X-CSE-MsgGUID: bZr+X1nOShaYKWYozGmKlg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535620" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:46 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi Subject: [Patch v3 4/6] perf tools: Add helper x86__is_intel_cpu() Date: Fri, 19 Sep 2025 10:16:57 +0800 Message-Id: <20250919021659.1263351-5-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add helper x86__is_intel_cpu() to indicate if it's a x86 intel platform. Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/util/env.c | 22 ++++++++++++++++++++++ tools/perf/util/env.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index c8c248754621..f1626d2032cd 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -802,3 +802,25 @@ bool x86__is_amd_cpu(void) =20 return is_amd; } + +bool perf_env__is_x86_intel_cpu(struct perf_env *env) +{ + static int is_intel; /* 0: Uninitialized, 1: Yes, -1: No */ + + if (is_intel =3D=3D 0) + is_intel =3D env->cpuid && strstarts(env->cpuid, "GenuineIntel") ? 1 : -= 1; + + return is_intel >=3D 1 ? true : false; +} + +bool x86__is_intel_cpu(void) +{ + struct perf_env env =3D { .total_mem =3D 0, }; + bool is_intel; + + perf_env__cpuid(&env); + is_intel =3D perf_env__is_x86_intel_cpu(&env); + perf_env__exit(&env); + + return is_intel; +} diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index e00179787a34..9977b85523a8 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -201,5 +201,7 @@ void perf_env__find_br_cntr_info(struct perf_env *env, =20 bool x86__is_amd_cpu(void); bool perf_env__is_x86_amd_cpu(struct perf_env *env); +bool x86__is_intel_cpu(void); +bool perf_env__is_x86_intel_cpu(struct perf_env *env); =20 #endif /* __PERF_ENV_H */ --=20 2.34.1 From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 B9CEE269D06; Fri, 19 Sep 2025 02:18:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248334; cv=none; b=Mg9dijBGwCI5HeffkbQkx5oJLFTTMTPjXh8uvn2qR0VlAAf3jrFdt77Vr9TUZPQJHpk6RJfgwl1C/c5cq0WRGyc6L01bOB9+zw/7zDaoWwRQNGu0pa3peVw0tTRItwxyG59z2xQ8x42cqt1HVT4L9HEF8k9Wrcog9Ecqp/xs25M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248334; c=relaxed/simple; bh=dx9SGPga2mFzGEm1E2rawUr6qE4VPONIHchyygbeaig=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=u9gPOnXZhLKNpl/MT5g/VN+D1C0CP87dLsH0kkS8R5giD5m6WS4mr8ng1f6gfMJxk6qyyWQdbAdaorzhnNfE7h/G1NGcp5Be4a5rmDFBhMfcUh5ghx7MpUVU2BhyerKOxrOdjLKUvNvKPExoR3J9YUQc2J0veXCPEw/t3vlp6v4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PDPFc3lc; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PDPFc3lc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248333; x=1789784333; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dx9SGPga2mFzGEm1E2rawUr6qE4VPONIHchyygbeaig=; b=PDPFc3lcoVahB1Oxl9/PZRLhFoKMsKYh7mIb6J56IUREI9S9bJiIXsYG 6cupK6QC6YjxLZI3+FkxdoW4NFPyhDLG7h+pDxKDpHvl1uJqtSJyQGnIm mydPNvl1R3W6DjGVAODsz/pGrqArzTZTTQaB0CT/ZLKAqyp8Y7GX9AMAx gamTijba17C4CCuNBPUALihnSDJl1DYojx32sULkEO/4oZHWBL9EvKoW1 Y+z1zlUlNaYGdlSCULLkhgSAq6vgWNHaSHPGlLxu2CRP2hnCYAgjBIyC8 wqlgS6JuDGKX7digQcnGU98V5nPqGxREHQWU4jOWkt90QD7gCoQdMDNW8 g==; X-CSE-ConnectionGUID: wfqrobmKT5uedEtLutQTCQ== X-CSE-MsgGUID: Ne7LacA5Q3GUYcMEgIuQMw== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229157" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229157" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:53 -0700 X-CSE-ConnectionGUID: 9YSoNgCJSCyHe5+07ovB0A== X-CSE-MsgGUID: IVNoqzH5TLOMsMANEnHjNA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535629" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:49 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi , Kevin Tian Subject: [Patch v3 5/6] perf tools kvm: Use "cycles" to sample guest for "kvm record" on Intel Date: Fri, 19 Sep 2025 10:16:58 +0800 Message-Id: <20250919021659.1263351-6-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After KVM supports PEBS for guest on Intel platforms (https://lore.kernel.org/all/20220411101946.20262-1-likexu@tencent.com/), host loses the capability to sample guest with PEBS since all PEBS related MSRs are switched to guest value after vm-entry, like IA32_DS_AREA MSR is switched to guest GVA at vm-entry. This would lead to "perf kvm record" fails to sample guest on Intel platforms since "cycles:P" event is used to sample guest by default as below case shows. sudo perf kvm record -a ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.787 MB perf.data.guest ] So to ensure guest record can be sampled successfully, use "cycles" instead of "cycles:P" to sample guest record by default on Intel platforms. With this patch, the guest record can be sampled successfully. sudo perf kvm record -a ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.783 MB perf.data.guest (23 samples) ] Reported-by: Kevin Tian Fixes: cf8e55fe50df ("KVM: x86/pmu: Expose CPUIDs feature bits PDCM, DS, DT= ES64") Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/arch/x86/util/kvm-stat.c | 51 +++++++++++++++++++++++++++++ tools/perf/builtin-kvm.c | 10 ------ tools/perf/util/kvm-stat.h | 10 ++++++ 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/tools/perf/arch/x86/util/kvm-stat.c b/tools/perf/arch/x86/util= /kvm-stat.c index 424716518b75..bff36f9345ea 100644 --- a/tools/perf/arch/x86/util/kvm-stat.c +++ b/tools/perf/arch/x86/util/kvm-stat.c @@ -3,9 +3,11 @@ #include #include "../../../util/kvm-stat.h" #include "../../../util/evsel.h" +#include "../../../util/env.h" #include #include #include +#include =20 define_exit_reasons_table(vmx_exit_reasons, VMX_EXIT_REASONS); define_exit_reasons_table(svm_exit_reasons, SVM_EXIT_REASONS); @@ -211,3 +213,52 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char= *cpuid) =20 return 0; } + +/* + * After KVM supports PEBS for guest on Intel platforms + * (https://lore.kernel.org/all/20220411101946.20262-1-likexu@tencent.com/= ), + * host loses the capability to sample guest with PEBS since all PEBS rela= ted + * MSRs are switched to guest value after vm-entry, like IA32_DS_AREA MSR = is + * switched to guest GVA at vm-entry. This would lead to "perf kvm record" + * fails to sample guest on Intel platforms since "cycles:P" event is used= to + * sample guest by default. + * + * So, to avoid this issue explicitly use "cycles" instead of "cycles:P" e= vent + * by default to sample guest on Intel platforms. + */ +int kvm_add_default_arch_event(int *argc, const char **argv) +{ + const char **tmp; + bool event =3D false; + int ret =3D 0, i, j =3D *argc; + + const struct option event_options[] =3D { + OPT_BOOLEAN('e', "event", &event, NULL), + OPT_BOOLEAN(0, "pfm-events", &event, NULL), + OPT_END() + }; + + if (!x86__is_intel_cpu()) + return 0; + + tmp =3D calloc(j + 1, sizeof(char *)); + if (!tmp) + return -ENOMEM; + + for (i =3D 0; i < j; i++) + tmp[i] =3D argv[i]; + + 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"); + *argc +=3D 2; + } + + free(tmp); + return 0; + +EXIT: + free(tmp); + return ret; +} diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index d297a7b2c088..c0d62add4996 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1636,16 +1636,6 @@ static int kvm_events_report_vcpu(struct perf_kvm_st= at *kvm) return ret; } =20 -#define STRDUP_FAIL_EXIT(s) \ - ({ char *_p; \ - _p =3D strdup(s); \ - if (!_p) { \ - ret =3D -ENOMEM; \ - goto EXIT; \ - } \ - _p; \ - }) - int __weak setup_kvm_events_tp(struct perf_kvm_stat *kvm __maybe_unused) { return 0; diff --git a/tools/perf/util/kvm-stat.h b/tools/perf/util/kvm-stat.h index 4249542544bb..53db3d56108b 100644 --- a/tools/perf/util/kvm-stat.h +++ b/tools/perf/util/kvm-stat.h @@ -190,5 +190,15 @@ static inline struct kvm_info *kvm_info__new(void) #define kvm_info__zput(ki) do { } while (0) #endif /* HAVE_KVM_STAT_SUPPORT */ =20 +#define STRDUP_FAIL_EXIT(s) \ + ({ char *_p; \ + _p =3D strdup(s); \ + if (!_p) { \ + ret =3D -ENOMEM; \ + goto EXIT; \ + } \ + _p; \ + }) + extern int kvm_add_default_arch_event(int *argc, const char **argv); #endif /* __PERF_KVM_STAT_H */ --=20 2.34.1 From nobody Thu Oct 2 07:45:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (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 3EC2E25784A; Fri, 19 Sep 2025 02:18:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248337; cv=none; b=cNPHKCNThH1nT26yVgfR81E/KWthLjEzV3BRxVsvEV3eOZnXqsHDo4/suqg6C3pymunUfkza4chV7EeHxXz1I4XznqE3ucmPFpJ2bD3gJN58zfJQmmtpowg6UBm67HUPpC2IKIShwql+sHBlfTcUaOOrzFVpOA74zS4nZny1E+c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758248337; c=relaxed/simple; bh=k8TZ0MrGjVQ8MHNSQRVAWklPMEf4TggTJTigNzpkZi0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PzN0lvYPvcklScdrklj/ozDJ4fYPEmGvq+b82dx7zn5S+UrRtiqms+sjwqRFdIwRnRqcLPDjf/I70EVfVRLsiwEkj+5DUeyv1kNRS2XZaqZw//cI49Ze/J9M4/8dhy83sNZITdWkp5HHO1/K1LFEMJ53rWV/Ea4sSpjHME7tedY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=dqTUSDke; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="dqTUSDke" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1758248337; x=1789784337; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=k8TZ0MrGjVQ8MHNSQRVAWklPMEf4TggTJTigNzpkZi0=; b=dqTUSDke8ZmtTQPStSvXRtaSxHx/H28dxCIlJOMCHv69FVH6bu/i2NWI pCBn0fH1OGI7uAk1cGZqZu+hkouIXncCS7SwMGEdSBdNpRl4kXfE+wpl9 dAlb3DQ9L2Fs7tpha53vbKAqAQMkyDRVwA2cz3uGZUFPrRUd4++xF7U4f gOAcM4Y8NCIhJlJ+tn78Ql+12pleCYWTSe6Kwe5/vnMEwfgfI5ZSimzai PaL5HWnse7I23R4Ldea/hRUpr4kky2jPWuNcnthF+mkJ4Eoyj84y1JWpE 3O75vttV0JZ6u6vVDaH781Uj2VNaUSG2H9G394OF7l+ORRxVXMPaqIQwT w==; X-CSE-ConnectionGUID: D+rLXfoTR4ajkieTEqYx2w== X-CSE-MsgGUID: gNj/qIjwTFOLDpD5rLQA7g== X-IronPort-AV: E=McAfee;i="6800,10657,11557"; a="64229168" X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="64229168" Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2025 19:18:56 -0700 X-CSE-ConnectionGUID: JA9H6aN1SpWt3R2jBTne7w== X-CSE-MsgGUID: Yqg3UeuyQDq7sSBwPZJAfA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,276,1751266800"; d="scan'208";a="175535638" Received: from spr.sh.intel.com ([10.112.229.196]) by orviesa007.jf.intel.com with ESMTP; 18 Sep 2025 19:18:53 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dapeng Mi , Dapeng Mi , Kevin Tian Subject: [Patch v3 6/6] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel Date: Fri, 19 Sep 2025 10:16:59 +0800 Message-Id: <20250919021659.1263351-7-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> References: <20250919021659.1263351-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As same reason with previous patch, use "cyles" instead of "cycles:P" event by default to sample guest for "perf kvm top" command on Intel platforms. Reported-by: Kevin Tian Fixes: cf8e55fe50df ("KVM: x86/pmu: Expose CPUIDs feature bits PDCM, DS, DT= ES64") Signed-off-by: Dapeng Mi Acked-by: Namhyung Kim --- tools/perf/builtin-kvm.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index c0d62add4996..f0f285763f19 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -2084,6 +2084,38 @@ __cmd_buildid_list(const char *file_name, int argc, = const char **argv) return ret; } =20 +static int __cmd_top(int argc, const char **argv) +{ + int rec_argc, i =3D 0, ret; + const char **rec_argv; + + /* + * kvm_add_default_arch_event() may add 2 extra options, so + * allocate 2 more pointers in adavance. + */ + rec_argc =3D argc + 2; + rec_argv =3D calloc(rec_argc + 1, sizeof(char *)); + if (!rec_argv) + return -ENOMEM; + + for (i =3D 0; i < argc; i++) + rec_argv[i] =3D STRDUP_FAIL_EXIT(argv[i]); + + BUG_ON(i !=3D argc); + + ret =3D kvm_add_default_arch_event(&i, rec_argv); + if (ret) + goto EXIT; + + ret =3D cmd_top(i, rec_argv); + +EXIT: + for (i =3D 0; i < rec_argc; i++) + free((void *)rec_argv[i]); + free(rec_argv); + return ret; +} + int cmd_kvm(int argc, const char **argv) { const char *file_name =3D NULL; @@ -2144,7 +2176,7 @@ int cmd_kvm(int argc, const char **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); + 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_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) --=20 2.34.1