From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpbg150.qq.com (smtpbg150.qq.com [18.132.163.193]) (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 7CCC2379982 for ; Mon, 29 Jun 2026 01:44:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=18.132.163.193 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782697459; cv=none; b=iBG8uqC6J9FI+Yfp3SMy35c4pZcYa7WQHRKysC/q1EniiadnhzRQtmJ0jOmRNN7OJb28ZCnl3EtIlSg/22Z67+U/2G39SWz78YXw3MOvhLCKm0PCWNPQLo5DaCSoQebhTXTbvO1vEhHjqAAypfgTyevzkjAz9/DSP3XsOliZ3jk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782697459; c=relaxed/simple; bh=ybrSco1uS8atZTO6PeDQOnhzgOr6PkGKj5Yx2Nzr0eo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tZBvnOkGfwoDtf5dmg+vzPDV+sx34jHn4blq3ADKtC00U/ylhuMmXLNnlY3tyuA45gbL9HEqwa6PBbcPNYuT9QYVgQ7h0wHTde9bYNrcrHGln9flpmE9c5ibbcde0WaidPWr2METMoJxmW4OAtp6CeNcMSsZ3i6pcUuHjc3Ky8o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=FpiIl+XR; arc=none smtp.client-ip=18.132.163.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="FpiIl+XR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1782697416; bh=Je8GC5rfMEsUvYHdHGNvs3OOS9YdQIZpjylOSaYJNy8=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=FpiIl+XRiVnt/cg3A7RITZL/lZ7CgLRUjxrdmwoPVJgWxwHdRtpxFddegg8TCWjDf RplzUnrf80BjdN8uv3spywR8U9vtupCMS6viHO4whghz01KAudVseaabw0DChfjqlx qB+3M3W1eHswpmKukSWTj83wRfXp1pgdqu3WnXYk= X-QQ-mid: zesmtpsz7t1782697411t8fa0576d X-QQ-Originating-IP: /hKfklZZPe1Pgu6rC+PnFOPJtte/kahdGolhpK0wQdo= Received: from uniontech.com ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 29 Jun 2026 09:43:29 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 14536289128426533273 EX-QQ-RecipientCnt: 7 From: Yichong Chen To: akpm@linux-foundation.org Cc: vishal.moola@gmail.com, ye.liu@linux.dev, zhen.ni@easystack.cn, chenyichong@uniontech.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 2/3] tools/mm/page_owner_sort: free per-record allocations Date: Mon, 29 Jun 2026 09:43:15 +0800 Message-Id: <20260629014316.130307-3-chenyichong@uniontech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20260629014316.130307-1-chenyichong@uniontech.com> References: <20260629014316.130307-1-chenyichong@uniontech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz3a-0 X-QQ-XMAILINFO: ONeCszOCk2GVt8be9SyLc8QimUSxH1mGIPrY5AdhlIsFnWQx7Oe37cGD SQXF2dTR1mNnNG2YJeIT2GHPK6xj5GcyhL5YJ0vA3Pfi3d+o7YB3S+T66XOeZvHoT10lXaI Vc3tfZ3eIOLVh6rmcOthMl4SI29DT6eCDhTbpcPYD7oXpJn3T8PEFq3v9VBzZPH+DfiK7BF UVpmHwE69QhQanI0iLvrZggF4l/XHpBw3FfpKTxBdlBxS7e25HXzOYU1jzEespcNUuLwE/R 2H680tBccIG1vSps7MPw0olKAA0Ls7Umqh8T91KQ/L7CtaYRBriQMjxub2ctGGZNWdRGz06 MLzyiL8EANzEMcgJcOIkA9GSmP7alvRbt8uzZTXheEBoOJwelA+5XkPbVTC/ZJzBlEQ0MRS zduVK+Xteq5dEuTlG9ywRLXfxq3wKpOJQYXE33r6u2SRQznBLoO6B2ReAOHiGy58xYNyVrX OrnwgAPqVlCpUk4qyi44yJKHcAvBwO9PbiQDt00VLQN/pvZgaXYMarnTPnAjo4os6GDQ2JI QItzQ1bxy97QXdCQr0bckCSxEvuG4T0o2li6VcBuwFxtlrQjq6K5GOclPrPCxw5McR2UDHM OEufQdxyn2r/e5o7f6OTKybCEAvzxtGGl0rSkLiJaVV1GqByPAXJEir3lqnaufQmed4DB13 OvBlhU+yxtSRQrTG1UEQ8VmxUygHwTI314PC5c+89ga56b0OPPei4O/RnoAujgSrRHSIqwx qwsbXPN3STCaDwZbVkZxQoKn7yFUMnqAgEFdqhzX9sOej26UXjNYR0heyh76nwp52YqNsZG n0moVG/lQ/PuQBCpAWzRmZpPGNqPi83MY8qIeeY90jny0bU7ql7ZFII5phMMbif5NnsFm+M KjWP+N11XGKtNFRyoC2lJRsxh/DND1aBEXXwJc/DhWxeeYDp4cMXTTEXudlq77QgWH+8ZIy c/1Lgmx6Z6y3egkdWkr5rJ7pEJQCW8uA2FVvlONAF6wxpWOI7NvCy3LQBsU6aALZwBI4FaG POgmcIqa/iCupbETv2NIibY+gAbAl3sVTcYMzWrc4nDZadw/FvOxKRxfjSzCGW7HULX3z8s RidUmcR2PFc X-QQ-XMRINFO: NyFYKkN4Ny6FuXrnB5Ye7Aabb3ujjtK+gg== X-QQ-RECHKSPAM: 0 add_list() allocates comm and txt for each page owner record, but the cleanup path only frees the outer list array. This leaks both buffers for every retained record. Free partial allocations in add_list(), discarded records during culling, and retained records on exit. Reviewed-by: Vishal Moola Signed-off-by: Yichong Chen --- tools/mm/page_owner_sort.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c index 3c754826cec5..4c9be28abe3b 100644 --- a/tools/mm/page_owner_sort.c +++ b/tools/mm/page_owner_sort.c @@ -396,6 +396,12 @@ static char *get_comm(char *buf) return comm_str; } +static void free_block_list(struct block_list *block) +{ + free(block->comm); + free(block->txt); +} + static int get_arg_type(const char *arg) { if (!strcmp(arg, "pid") || !strcmp(arg, "p")) @@ -502,9 +508,14 @@ static bool add_list(char *buf, int len, char *ext_buf) list[list_size].pid = get_pid(buf); list[list_size].tgid = get_tgid(buf); list[list_size].comm = get_comm(buf); - list[list_size].txt = malloc(len+1); + if (!list[list_size].comm) { + fprintf(stderr, "Out of memory\n"); + return false; + } + list[list_size].txt = malloc(len + 1); if (!list[list_size].txt) { fprintf(stderr, "Out of memory\n"); + free(list[list_size].comm); return false; } memcpy(list[list_size].txt, buf, len); @@ -863,8 +874,10 @@ int main(int argc, char **argv) } else { list[count-1].num += list[i].num; list[count-1].page_num += list[i].page_num; + free_block_list(&list[i]); } } + list_size = count; qsort(list, count, sizeof(list[0]), compare_sort_condition); @@ -898,8 +911,11 @@ int main(int argc, char **argv) free(ext_buf); if (buf) free(buf); - if (list) + if (list) { + for (i = 0; i < list_size; i++) + free_block_list(&list[i]); free(list); + } out_ts: regfree(&ts_nsec_pattern); out_comm: -- 2.51.0