From patchwork Fri Apr 18 21:32:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kees Cook X-Patchwork-Id: 14057701 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A032FC369AB for ; Fri, 18 Apr 2025 21:39:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3AD46B0028; Fri, 18 Apr 2025 17:39:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CE9016B0029; Fri, 18 Apr 2025 17:39:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB36A6B002A; Fri, 18 Apr 2025 17:39:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 9A23A6B0028 for ; Fri, 18 Apr 2025 17:39:26 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 77BC81CCE06 for ; Fri, 18 Apr 2025 21:39:27 +0000 (UTC) X-FDA: 83348481174.13.9D188B9 Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf06.hostedemail.com (Postfix) with ESMTP id 9BEF8180006 for ; Fri, 18 Apr 2025 21:39:25 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=G2WCddnk; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of kees@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=kees@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745012365; a=rsa-sha256; cv=none; b=K3x2QaMr9P38TWi5wqtxYg0V326R1Z47t0Ziw6LzJxzRtTMUiCJlQ631xKpVv7b2bpkoBI 3US+tc0bNEW5gE6GlRv/c1EiQudh9Zs69V8y9eocIjsleIHMayJgIlz4R/w0H2RwTSjtkT 3+jClgcfhkqwmdg5y1zunKKeNbT5y2E= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=G2WCddnk; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of kees@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=kees@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745012365; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=rk68TsA3o31hTgJLBf2Gv0fYT2I1YziG/5HO6l5R5L8=; b=p5ZRxd0AVeW9KW0W6BSGB99aodWlq2W5pVbgRshbtQEXgHwsy6zm4rWnbErN8u+Jz7s6t0 BpLUE7bKg6bHFA74Gn+7XikSHUamlI2U6QiwdBBE/73+7AbZYiCOYe4ruzNuosm4NzOtMy ts1CBpBuFnO2FlkyRcot+ACoJhhH9ac= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 170C54A50A; Fri, 18 Apr 2025 21:39:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B194C4CEE2; Fri, 18 Apr 2025 21:39:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745012364; bh=Dxddxm0RejabRVjCTL14ao3nM8RrH3k/YV8zdVVdCso=; h=From:To:Cc:Subject:Date:From; b=G2WCddnkCUd9nuX4LNZaI9Bc6KvI6JUPHUd7atC1tG4qG8yCRUmD3UBZewEiLJ+cS tp/eU62QRFVpv+UR2Y5SadYgnWE4h9m2J04MizlxXOFzq098DtDK7MBA+aK2mc96+H tfbawR1cbyMP7vu6WBeQ2hZNQJOYTIscf3PkJsQJY77JGJuctcfP5fKPWe5A/U39jM qA8yu+v7E5GksMxIGucwygtHLtyy/+yfVU/7UvBi+eg3Tbbf4//3PEbpKy6NRtCRyR 264rLnzRFaknCTjvmRXOk0mNw7P564ZdWP0NSGSTjhCBrlpEt1jm97yP9Kn2STR45Y MFgOU73WviJbg== From: Kees Cook To: Christoph Hellwig Cc: Kees Cook , Masahiro Yamada , Andrew Morton , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Nathan Chancellor , Nicolas Schier , Nick Desaulniers , Bill Wendling , Justin Stitt , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kbuild@vger.kernel.org, llvm@lists.linux.dev, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [PATCH] kbuild: Switch from -Wvla to -Wvla-larger-than=0 Date: Fri, 18 Apr 2025 14:32:39 -0700 Message-Id: <20250418213235.work.532-kees@kernel.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3972; i=kees@kernel.org; h=from:subject:message-id; bh=Dxddxm0RejabRVjCTL14ao3nM8RrH3k/YV8zdVVdCso=; b=owGbwMvMwCVmps19z/KJym7G02pJDBlMR75tUNcXehp4aNuTF9IufZcazwSYsVpMuhT1SYfV7 DZjXfTDjlIWBjEuBlkxRZYgO/c4F4+37eHucxVh5rAygQxh4OIUgIlU6zD8sxcrPZD7z3HyfV5/ l5P7Zidtu6JR9j1/s8OLWSp8sROaOxkZ7tvemrNQJZAjpFqnUJfJSVdjfeDhLfxyf09LOTKE/fv OCwA= X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 X-Rspam-User: X-Rspamd-Queue-Id: 9BEF8180006 X-Rspamd-Server: rspam04 X-Stat-Signature: esntfiop55psnyh8u8i13o5psodwehr1 X-HE-Tag: 1745012365-947467 X-HE-Meta: U2FsdGVkX191Du9SdD7DeZmFhFYZndS7eM0ko6/ufUTLo/uSCwlLjus1WRpgeye6lJTGanTl/6pWNC7+rg6FAw301oi40ntDhYMXTnZN/WfQ0Fx7M+aIpb2skCA2cmbiozhDQ6Vy0tnaJX02X6dZPvDoyDDnlEK6vrOPGYvQ9upvH/DBiGcAwnzqS7P8pf8p5M2LcEX18rei5X1wj1rd+c1SX6w1e5fRWQNlTK/SqyxFXylVOZwuJV+kZXn2XKrVygxNtIEu8hhrtoFwvF+IZsmxlP5YhQ1MXMLo+WlH6KM9QL5YbziZSqZFgN25cN/9xWTOIcmqUY+h6ZXOLVrk1f8YMNd6br5aO4mm8BhvyronokiB0QwMIF1ocpHuZPOYeieoUIRAkX3MA4FDXJHemyTMJeSXsDn2wZ/VNf3S2DIDiyKz4JyygOrd0R2PVFHT7bElwIYtDCDA9+yN9Dzo8ovrPnG/kqZpkFufaZxQC7fyDkrfcL34q0oYjwVXvdT9SwqMrNo6XxsloilplIObEU7chKejHdPhNEcZpSuvi6jBirGFuX+gIOq8ZUUFUe9L6lzgWsSQhcl9LZPCFcLfX0TiWG7psJw/fXOhErUg+9j7el9Nh2iuOZ0SDMUJNNlY7j5iET0BIM861aOeCeVRbKvlxzJXTecymYzJHrh3xJCfzcO3ad6DzDblmXR34cTnd8wHCS+ztM00I/2EPSoiPrPHIbx1WG3jYSM4wBsVlYpVsvEwHbbkwAkGIMTG+la0He/083MchCi34Wgnnxx26RS8njZr7AiIlRyLafanCPqrZdkNsF5+gZEb4uxEUcxlgnQXlPWo/YSXKW8Wf6acSzIkStHvN8q19/hXXBOoDe1DxRO3Dhw1bGANumwTyj7DCaUJeTOeZ+9+6gwefcQiIONx5NgGTr0eIK5d6E/CWfz/TTtQYw0k5VC9mo/7o3ojVPRiXflN3mcBCWsh80N T0B+BjiG ZVfnbwa0xB+6JPYvSbwfnxrIeeQjVB9U+JdRXZCpB9UJ2Uwdx3N6EfFWbGOnh/JcbT+PjnmOpWLeIGNv1C7gCWGxIlUIq2i5ICBj5nSf2euekeYo24X4doy72toJALsKJ9xTb/9uzMvMBpH+dvy9nwrWR2HbzsWHX8f7SvyZiIxy7wbnltvofC78rUNseg0rFYVK+CFhgRfNsXLWBQa+6UISh0A5yrHFQ0JRysqKPNxz63lvDFqbS4zOOp1y0jMP+lGa8wHiOw7GksqJ6P6jguHbBPW7TbBOJaZLxHk3DqSi1bKGNE0pO9Yak+e2P8iYyEQoV2xhy77BSFzJ80ehkMuNdiFizUm7o5M3sVq26iZdXAQ81M3EM41qiDFON+EQZrIAsxpN7FkKjdGuke1RERRu4XYxC0i+HGeah++uZrbnjt1PXpZQEyU4N0YURe0EbfgkwqbMfxqNv/dpd2LCaIuOlxS0oWEsaWkc+DaGhPd94PkmcxueSbvTWateN4Cghz3cuDlG/9UASnicjg+vrQmfJxEpP794vki9kceVKYmj89dplh3EdOQqmgmXz1fGpIYm+VBOQm7JsxuLyXL/zObHKilBluqLdXNHjAWr/HUibE9Qenl5Q+VbQKv6yXFY0NOGXhY4yTD4r2KwvzZPxmoLOqCQc63L2LRZIgb6nnsMmnAfOHow3pruPQK0KyEkKLGAe X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Variable Length Arrays (VLAs) on the stack must not be used in the kernel. Function parameter VLAs[1] should be usable, but -Wvla will warn for those. For example, this will produce a warning but it is not using a stack VLA: int something(size_t n, int array[n]) { ... Clang has no way yet to distinguish between the VLA types[2], so depend on GCC for now to keep stack VLAs out of the tree by using GCC's -Wvla-larger-than=0 option (though GCC may split -Wvla[3] similarly to how Clang is planning to). Switch to -Wvla-larger-than=0 and adjust the two VLA-checking selftests to disable the updated option name. Link: https://en.cppreference.com/w/c/language/array [1] Link: https://github.com/llvm/llvm-project/issues/57098 [2] Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98217 [3] Signed-off-by: Kees Cook --- Cc: Christoph Hellwig Cc: Masahiro Yamada Cc: Andrew Morton Cc: Andrey Ryabinin Cc: Alexander Potapenko Cc: Andrey Konovalov Cc: Dmitry Vyukov Cc: Vincenzo Frascino Cc: Nathan Chancellor Cc: Nicolas Schier Cc: Nick Desaulniers Cc: Bill Wendling Cc: Justin Stitt Cc: Cc: Cc: Cc: --- lib/Makefile | 2 +- mm/kasan/Makefile | 2 +- scripts/Makefile.extrawarn | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/Makefile b/lib/Makefile index f07b24ce1b3f..37b6e5782ecb 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -71,7 +71,7 @@ CFLAGS_test_bitops.o += -Werror obj-$(CONFIG_TEST_SYSCTL) += test_sysctl.o obj-$(CONFIG_TEST_IDA) += test_ida.o obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o -CFLAGS_test_ubsan.o += $(call cc-disable-warning, vla) +CFLAGS_test_ubsan.o += $(call cc-option, -Wno-vla-larger-than) CFLAGS_test_ubsan.o += $(call cc-disable-warning, unused-but-set-variable) UBSAN_SANITIZE_test_ubsan.o := y obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o diff --git a/mm/kasan/Makefile b/mm/kasan/Makefile index 1a958e7c8a46..0e326116a70b 100644 --- a/mm/kasan/Makefile +++ b/mm/kasan/Makefile @@ -35,7 +35,7 @@ CFLAGS_shadow.o := $(CC_FLAGS_KASAN_RUNTIME) CFLAGS_hw_tags.o := $(CC_FLAGS_KASAN_RUNTIME) CFLAGS_sw_tags.o := $(CC_FLAGS_KASAN_RUNTIME) -CFLAGS_KASAN_TEST := $(CFLAGS_KASAN) $(call cc-disable-warning, vla) +CFLAGS_KASAN_TEST := $(CFLAGS_KASAN) $(call cc-option, -Wno-vla-larger-than) ifndef CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX # If compiler instruments memintrinsics by prefixing them with __asan/__hwasan, # we need to treat them normally (as builtins), otherwise the compiler won't diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn index d75897559d18..0229b10c5d81 100644 --- a/scripts/Makefile.extrawarn +++ b/scripts/Makefile.extrawarn @@ -45,8 +45,13 @@ endif # These result in bogus false positives KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer) -# Variable Length Arrays (VLAs) should not be used anywhere in the kernel -KBUILD_CFLAGS += -Wvla +# Stack Variable Length Arrays (VLAs) must not be used in the kernel. +# Function array parameters should, however, be usable, but -Wvla will +# warn for those. Clang has no way yet to distinguish between the VLA +# types, so depend on GCC for now to keep stack VLAs out of the tree. +# https://github.com/llvm/llvm-project/issues/57098 +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98217 +KBUILD_CFLAGS += $(call cc-option,-Wvla-larger-than=0) # disable pointer signed / unsigned warnings in gcc 4.0 KBUILD_CFLAGS += -Wno-pointer-sign