From patchwork Fri Dec 8 00:05:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 175469 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp5143234vqy; Thu, 7 Dec 2023 16:05:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IGfYN7EIGvwWcT6L2wPpGdEa4uUCvI+gGACgt+x3UDGDklEjShHG7183Lf98E1SwMjIg5hi X-Received: by 2002:a17:903:48a:b0:1d2:ec9b:92a with SMTP id jj10-20020a170903048a00b001d2ec9b092amr133237plb.73.1701993933948; Thu, 07 Dec 2023 16:05:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701993933; cv=none; d=google.com; s=arc-20160816; b=qF8F/zpHsJXmuWkDTdV+otWa+bfFTeb06VOaBNsGiOA+zBtLHxk1pz5tnOZJT7pXRk ybgNIt0hLV3CFB4S88jZ73HCiO3/SU7enGCi6u6UF2DKoW903CzBbfqgMYlJrEwHSinC rf1J3OJ5DyStL7h31fNJYvqac0UQmimlAh5KmrIvVQKAKnR5c7NZWWBcYbx3mybbgHOb 7gF5NrBNDl5q9Danjxc4wTpr52CoXeLpitd3AiAxMXVc/TmQpf+l4ZdStcbVKwd1hSrX FCklzij3NlGPP5n2+90n+Z2zISZR08upbAb8vHUMJWen1Q0u88OMlP8F0tKQ807dwaXL Vdbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:from:subject:mime-version:message-id:date :dkim-signature; bh=R7VAKwLUWVywjDo2dEK6wuoDMXw70DBGya721KiihN0=; fh=TIE+Q456lum2w6CNS8hGW8/qeLzq5fdQr2L1Nx0bPN4=; b=EWmRp6eiQyogsqybK4foqyLCoeAtFjh1DKwcCxLL2+WlJtZo2ayVaTD4Hns5hM6W/n OCMCxHzCBQf8GfkUszAChpGnXD6vSpgqODEC4hCeODz/6M3QmxCY7QyKwFWGd3ZFBvEs y7uoinmockNlkTlUXffPNR6Bij86nxNscstcDTo8hgqb+I7PVuF5YwFRUIl0xFiPu8nB 6AP/dsH7oeFxCWg6txpm1cP+QfwPJIvgljPAos0Rlowq7l7NoYW98j8VvVdz70T5z5Yo A+X3PSz/SUmJ+RZfgfTgdAFFHNLYGjDG24oldjYwhRKujA1+K7h3biRNjXV7GrP4/G19 2/oA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=x0tL1bBz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id n3-20020a170902e54300b001d005539ab3si549508plf.360.2023.12.07.16.05.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 16:05:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=x0tL1bBz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id ABF20833D547; Thu, 7 Dec 2023 16:05:29 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232505AbjLHAFU (ORCPT + 99 others); Thu, 7 Dec 2023 19:05:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229531AbjLHAFT (ORCPT ); Thu, 7 Dec 2023 19:05:19 -0500 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 7C4751716 for ; Thu, 7 Dec 2023 16:05:25 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5d942a656b7so18225337b3.1 for ; Thu, 07 Dec 2023 16:05:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1701993924; x=1702598724; darn=vger.kernel.org; h=to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=R7VAKwLUWVywjDo2dEK6wuoDMXw70DBGya721KiihN0=; b=x0tL1bBzPd2y1Arwym5V8VyRxX/wao6al+lRmd/1JaDyeGZUdKD62/YcJvRuJUOlJt 14icRm9QIXPNDjqpYb6oAJ1LDAlpBBMe1zGrThdDauLLR8I9/g1y3FagG5tTuFES0tKZ dy3i7UM/Bah6LHAQ5Shq7ZIMBgCycTZDn/3GSahtYsyOgdQbF86S7b7PbQV/wVkUgNsN EGzDezAKNBZHDhm2ebsPc9ypuaSOVbNagY96s7rJujQGUTiIT9Cd9QBToaCeZ+bdu8BH O++Tc7tf7YAQJFHLs6+4CIC9deqU8J1haQNNRkMYgDHCGwOp7wC5WzN7dHaS3jcA4nqD jwzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701993924; x=1702598724; h=to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=R7VAKwLUWVywjDo2dEK6wuoDMXw70DBGya721KiihN0=; b=doaClfcoPbAZe8a7fFXxWrhQx7hoCXG9gS95YGF4k/nE2ThzTdjpblZaXlRH7gXvGn ZbG/ZZIviXCFzD7NFci1DUnd4t2Ahj1cGtkyeQgXmIYoAHuMtJmEQcqsztojm4hB5z0P 8bUbXHh9QCkh1eoMPBiEnb/FX3aoPx74MAK9BrRYvmDloO0oaEOZm2Crtu5E2Gbblrox vWQFSZsCPbfp9mVqDg+xo91Cz96lX27yurKv9ZR3avMhX4lWJACkgJZVigqmAcwV3anM HrIk3JGvBxUagjw2BGR3PAgB1zRrHhajKqlDHmf6TQ9wdH/qjVOd3YbC091QbPL7UcN8 3Uyw== X-Gm-Message-State: AOJu0YyjJbir1X8mYCZnH8Myl+pwwu9eVIancaFn9tYXVMPwlYgq8mP+ 8hbC6atz5bGFZ9khRxBeQjnUS7oTQN7S X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:aa27:6848:76cc:141c]) (user=irogers job=sendgmr) by 2002:a05:690c:4607:b0:5d3:9513:4aad with SMTP id gw7-20020a05690c460700b005d395134aadmr53065ywb.3.1701993924731; Thu, 07 Dec 2023 16:05:24 -0800 (PST) Date: Thu, 7 Dec 2023 16:05:13 -0800 Message-Id: <20231208000515.1693746-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Subject: [PATCH v1 1/3] lib subcmd: Fix memory leak in uniq From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Chenyuan Mi , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Thu, 07 Dec 2023 16:05:29 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784669991472858862 X-GMAIL-MSGID: 1784669991472858862 uniq will write one command name over another causing the overwritten string to be leaked. Fix by doing a pass that removes duplicates and a second that removes the holes. Signed-off-by: Ian Rogers --- tools/lib/subcmd/help.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/lib/subcmd/help.c b/tools/lib/subcmd/help.c index adfbae27dc36..8561b0f01a24 100644 --- a/tools/lib/subcmd/help.c +++ b/tools/lib/subcmd/help.c @@ -52,11 +52,21 @@ void uniq(struct cmdnames *cmds) if (!cmds->cnt) return; - for (i = j = 1; i < cmds->cnt; i++) - if (strcmp(cmds->names[i]->name, cmds->names[i-1]->name)) - cmds->names[j++] = cmds->names[i]; - + for (i = 1; i < cmds->cnt; i++) { + if (!strcmp(cmds->names[i]->name, cmds->names[i-1]->name)) + zfree(&cmds->names[i - 1]); + } + for (i = 0, j = 0; i < cmds->cnt; i++) { + if (cmds->names[i]) { + if (i == j) + j++; + else + cmds->names[j++] = cmds->names[i]; + } + } cmds->cnt = j; + while (j < i) + cmds->names[j++] = NULL; } void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)