Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp5183272rdb; Wed, 13 Dec 2023 01:00:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IHAvDHwi5QormZ0Vkcjoy8m00qtI5ltgbDkoX4su6gK0HqQmrlMLTS4Dfj9oj0ijSXQoVKz X-Received: by 2002:a05:6359:71cd:b0:170:5743:e9a7 with SMTP id uf13-20020a05635971cd00b001705743e9a7mr5756103rwb.58.1702458045071; Wed, 13 Dec 2023 01:00:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702458045; cv=none; d=google.com; s=arc-20160816; b=P+BKpOy8ZGcum7RZ4IoeKsuR38+UCLHcyQ2T9ZjYRo2CPTeCVQFZVJhylqI7jvNDKn cl3lugZhOx+OZjUf5gYfeFI/v5XuCfdBj9jI1CnSKTgdANRA3XPt8f9CauzlIObrfAqH AGGjI+JJs07Cl/04IcqIEHztREX9weH5CGXfqU3ncNANsVdW+Y1BniWIq+5K6jGmNyl+ 9PXV7uvEHT/tAY7IKxq2xoqzH6VA0fZgg7OrVyArK8rb2qPzBBfYol8/0AdTboC3m9FJ xTqxAVyQzLVbCUGF6xd6NOlMWDefoGRfa7lhwfVE6xYhlgbABNmYpnABq0lvC3WnmVmG t3mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=U8cMDMa9YzBN4szcfl7doDUw5H0mUyUxaKMbJZAX8m0=; fh=reEjKSE5iVnrFj98TKNAuQQUub1faruVorHVuExVO+4=; b=NI8rVuZo+QCxS8q5ooWTO9/tTx1LgXeg9PbK1qiAzySVclt7p/R5p97T0RhdioGCTo LCoEVJMcSrty1+xd6m3Pn8HSrbhWsv3P8t8jkFANOAg1uup+AB9YTR7dxFDA8VV3jThe wyeaEHr6Eb8kTT46lnXYhOuWAqRCXcMCpXrPv+IsnyH6lQesTy93cYhZ47EPLxxbHsKQ kntSTFWoC7vOntN4LHhy/gj26SxbwPRT5UzsKd/JP4/YpalFJb82k78eqBKl3hz20rbm r3/CQwh+RC23ZmaUrD95D8ygdbD36nsjVYzIgL7+Gd8oVpf6MMNSmlGp5LZ18grQhwDD XjtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QRMKY1Cj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from morse.vger.email (morse.vger.email. [2620:137:e000::3:1]) by mx.google.com with ESMTPS id ob13-20020a17090b390d00b0028aabe55eefsi3429452pjb.79.2023.12.13.01.00.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Dec 2023 01:00:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) client-ip=2620:137:e000::3:1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QRMKY1Cj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id 3D8AA806D822; Wed, 13 Dec 2023 01:00:32 -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 S232125AbjLMJAS (ORCPT + 99 others); Wed, 13 Dec 2023 04:00:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjLMJAP (ORCPT ); Wed, 13 Dec 2023 04:00:15 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D736AD for ; Wed, 13 Dec 2023 01:00:22 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 71122C433C9; Wed, 13 Dec 2023 09:00:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702458021; bh=KYg70uTTMCVbbybOUe4N/VTYl2TBfccDvrHX9QOYSpI=; h=From:To:Cc:Subject:Date:From; b=QRMKY1CjqdvbZ0fbr2tBAwGIzwJ4uuPaNCuYkelu9eHILPcC0WvZTScIzOI0dNK6V p1zR4KyknBgnnd5nC0szCG01DrkV10nVXhXEHNpRgKjg6a7oiP96Z57Ac5xlStWol6 NVYSF2Rjf0QHrI7WipJ/iT1qYwm5S7kVASmGKI9t0uZifTt31XCU1DFiWWkMMO6pBo un3hUZCgfnLgjKqP9Bhj6on6scYXyuwRyLSPZKGkH7na7rgPBgSx7s4aeZUv65A7kH eJgltZHbSlNr5p2rGIBgU9stsuQBnnQXq21MW1fKdlqy4KK3mgRuurRBFCKEoqMB66 f/f8r09VGOqxQ== From: Arnd Bergmann To: Alexander Viro , Christian Brauner Cc: Arnd Bergmann , Jan Kara , Ian Kent , Miklos Szeredi , "Seth Forshee (DigitalOcean)" , Dave Chinner , Amir Goldstein , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] [v2] statmount: reduce runtime stack usage Date: Wed, 13 Dec 2023 10:00:03 +0100 Message-Id: <20231213090015.518044-1-arnd@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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]); Wed, 13 Dec 2023 01:00:32 -0800 (PST) From: Arnd Bergmann prepare_kstatmount() constructs a copy of 'struct kstatmount' on the stack and copies it into the local variable on the stack of its caller. Because of the size of this structure, this ends up overflowing the limit for a single function's stack frame when prepare_kstatmount() gets inlined and both copies are on the same frame without the compiler being able to collapse them into one: fs/namespace.c:4995:1: error: stack frame size (1536) exceeds limit (1024) in '__se_sys_statmount' [-Werror,-Wframe-larger-than] 4995 | SYSCALL_DEFINE4(statmount, const struct mnt_id_req __user *, req, Replace the assignment with an in-place memset() plus assignment that should always be more efficient for both stack usage and runtime cost. Fixes: 49889374ab92 ("statmount: simplify string option retrieval") Signed-off-by: Arnd Bergmann --- fs/namespace.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index d036196f949c..159f1df379fc 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -4957,15 +4957,12 @@ static int prepare_kstatmount(struct kstatmount *ks, struct mnt_id_req *kreq, if (!access_ok(buf, bufsize)) return -EFAULT; - *ks = (struct kstatmount){ - .mask = kreq->param, - .buf = buf, - .bufsize = bufsize, - .seq = { - .size = seq_size, - .buf = kvmalloc(seq_size, GFP_KERNEL_ACCOUNT), - }, - }; + memset(ks, 0, sizeof(*ks)); + ks->mask = kreq->param; + ks->buf = buf; + ks->bufsize = bufsize; + ks->seq.size = seq_size; + ks->seq.buf = kvmalloc(seq_size, GFP_KERNEL_ACCOUNT); if (!ks->seq.buf) return -ENOMEM; return 0; -- 2.39.2