From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CEC27C77B7A for ; Fri, 26 May 2023 18:34:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243156AbjEZSej (ORCPT ); Fri, 26 May 2023 14:34:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242415AbjEZSe1 (ORCPT ); Fri, 26 May 2023 14:34:27 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1EC71BC for ; Fri, 26 May 2023 11:34:24 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-bacfa4eefd3so1399146276.3 for ; Fri, 26 May 2023 11:34:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685126064; x=1687718064; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=IwZgXsbfM/yRQGwLSKe9ovUWpmwV9Y2ViG2ttFwDyVc=; b=P3WUQOpO/2OmEOWL4v68PeX96YDZimXT3rksqKLMrmTrK8MQxkjC2umm8fvsEWccSJ /+3D7ziJhJVmsGLBZHd2l5tRIO7p8REM6v+m9EM4FaGNzpkanaUiwFR4n2fGmbR3TqZj CyTVWt5TbJacZkoXPvlNL/2I5nV7E8WwbiLVUNRcc5sBWUoNrcZ2JbzdxgJCWl29r9R2 tPDlq6QcYaCLHgBUZgKsG/W2uJYhOn1wo7q/9aCVZT2CPNgk1dSV5O2RtRjiuXwpMc8t sHTHcZHRs2MUtlMChsPH3SQmiyrViokTjF8+5FMMzdXPJjJ/eprAcM7as6bwEjmHpCpx Fmog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685126064; x=1687718064; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IwZgXsbfM/yRQGwLSKe9ovUWpmwV9Y2ViG2ttFwDyVc=; b=jFtCtr73kfByDSVK+wFFM/UWi7I8DndlM/iGEaOtwu0BLiB0VzPeMd0iPg8zAVxN6c B72P1uzvPqn5XxNpX4JZ2h4OMZ7i8Oy7OL+m1/u43nr8Jt12CF9wph6Zf+W9RU/4T3Xf ukTOWzHfN2Sc7i2EBPHAbY0ltsoCTlBZpilQPB6/+7sEebGWbI0AcGOVqAze2/V4tzx4 qWEkAvl1yKXHBaJiVUmXLmdvMXD1S8sFIKFewzq+v+tvi9ZxRCUrWcR55C9l0qGUprWd iEhQIwAV2DUu5nY76aaMgJK69SuHyYxDgja78odyAnVNpVbTsnFYN+1q8m7rkCehjpQf 8/Hg== X-Gm-Message-State: AC+VfDw4aET3/3bymYjxK5UBU0LsECKNoHCDcbGEb9cX9EGRGuTjPkgk Qo1M3i1JgEPy3DrfurMgsRX2dWCTaWN9 X-Google-Smtp-Source: ACHHUZ7oC0kj5UVzgKLE84lwKOIsiFYUI4ZOIiTEKnYoI6Wvcg5eFnNtZbjn2Lxucx3jJfRhp27zzIBPDbe6 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a5b:70e:0:b0:ba8:97f8:620f with SMTP id g14-20020a5b070e000000b00ba897f8620fmr1379099ybq.8.1685126064565; Fri, 26 May 2023 11:34:24 -0700 (PDT) Date: Fri, 26 May 2023 11:33:51 -0700 In-Reply-To: <20230526183401.2326121-1-irogers@google.com> Message-Id: <20230526183401.2326121-7-irogers@google.com> Mime-Version: 1.0 References: <20230526183401.2326121-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v2 06/16] tools api fs: Avoid large static PATH_MAX arrays From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , "Masami Hiramatsu (Google)" , "Steven Rostedt (Google)" , Ross Zwisler , Leo Yan , Tiezhu Yang , Yang Jihong , Andi Kleen , Kan Liang , Ravi Bangoria , Sean Christopherson , K Prateek Nayak , Paolo Bonzini , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org Change struct fs to have a pointer to a dynamically allocated array rather than an array. This reduces the size of fs__entries from 24,768 bytes to 240 bytes. Read paths into a stack allocated array and strdup. Fix off-by-1 fscanf %s in fs__read_mounts caught by address sanitizer. Signed-off-by: Ian Rogers --- tools/lib/api/fs/fs.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c index 82f53d81a7a7..22d34a0be8b4 100644 --- a/tools/lib/api/fs/fs.c +++ b/tools/lib/api/fs/fs.c @@ -88,7 +88,7 @@ static const char * const bpf_fs__known_mountpoints[] = { struct fs { const char *name; const char * const *mounts; - char path[PATH_MAX]; + char *path; bool found; bool checked; long magic; @@ -151,17 +151,23 @@ static bool fs__read_mounts(struct fs *fs) bool found = false; char type[100]; FILE *fp; + char path[PATH_MAX + 1]; fp = fopen("/proc/mounts", "r"); if (fp == NULL) - return NULL; + return false; while (!found && fscanf(fp, "%*s %" STR(PATH_MAX) "s %99s %*s %*d %*d\n", - fs->path, type) == 2) { + path, type) == 2) { - if (strcmp(type, fs->name) == 0) + if (strcmp(type, fs->name) == 0) { + free(fs->path); + fs->path = strdup(path); + if (!fs->path) + return false; found = true; + } } fclose(fp); @@ -188,8 +194,11 @@ static bool fs__check_mounts(struct fs *fs) ptr = fs->mounts; while (*ptr) { if (fs__valid_mount(*ptr, fs->magic) == 0) { + free(fs->path); + fs->path = strdup(*ptr); + if (!fs->path) + return false; fs->found = true; - strcpy(fs->path, *ptr); return true; } ptr++; @@ -227,10 +236,12 @@ static bool fs__env_override(struct fs *fs) if (!override_path) return false; + free(fs->path); + fs->path = strdup(override_path); + if (!fs->path) + return false; fs->found = true; fs->checked = true; - strncpy(fs->path, override_path, sizeof(fs->path) - 1); - fs->path[sizeof(fs->path) - 1] = '\0'; return true; } -- 2.41.0.rc0.172.g3f132b7071-goog