lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250601232435.3507697-80-sashal@kernel.org>
Date: Sun,  1 Jun 2025 19:24:02 -0400
From: Sasha Levin <sashal@...nel.org>
To: patches@...ts.linux.dev,
	stable@...r.kernel.org
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
	Masahiro Yamada <masahiroy@...nel.org>,
	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	Arnd Bergmann <arnd@...db.de>,
	Stephen Rothwell <sfr@...b.auug.org.au>,
	Thomas Weißschuh <linux@...ssschuh.net>,
	Nathan Chancellor <nathan@...nel.org>,
	Sasha Levin <sashal@...nel.org>,
	linux-kbuild@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH AUTOSEL 6.15 080/110] Make 'cc-option' work correctly for the -Wno-xyzzy pattern

From: Linus Torvalds <torvalds@...ux-foundation.org>

[ Upstream commit 550ccb178de2f379f5e1a1833dd6f4bdafef4b68 ]

This is the follow-up to commit a79be02bba5c ("Fix mis-uses of
'cc-option' for warning disablement") where I mentioned that the best
fix would be to just make 'cc-option' a bit smarter, and work for all
compiler options, including the '-Wno-xyzzy' pattern that it used to
accept unknown options for.

It turns out that fixing cc-option is pretty straightforward: just
rewrite any '-Wno-xyzzy' option pattern to use '-Wxyzzy' instead for
testing.

That makes the whole artificial distinction between 'cc-option' and
'cc-disable-warning' go away, and we can happily forget about the odd
build rule that you have to treat compiler options that disable warnings
specially.

The 'cc-disable-warning' helper remains as a backwards compatibility
syntax for now, but is implemented in terms of the new and improved
cc-option.

Acked-by: Masahiro Yamada <masahiroy@...nel.org>
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: Arnd Bergmann <arnd@...db.de>
Cc: Stephen Rothwell <sfr@...b.auug.org.au>
Cc: Thomas Weißschuh <linux@...ssschuh.net>
Cc: Nathan Chancellor <nathan@...nel.org>
Signed-off-by: Linus Torvalds <torvalds@...ux-foundation.org>
Signed-off-by: Sasha Levin <sashal@...nel.org>
---

I can see an example of the problem on line 48: `-Wno-sign-compare` is
being added directly instead of using `cc-disable-warning`. Now let me
analyze the specific changes in the commit to understand what the fix
does. Based on my analysis of the commit "Make 'cc-option' work
correctly for the -Wno-xyzzy pattern", here is my assessment: **YES**
This commit should be backported to stable kernel trees. Here's my
detailed analysis: ## Analysis of the Code Changes The commit makes a
crucial fix to the `cc-option` and `cc-disable-warning` functions in
`scripts/Makefile.compiler`. The key changes are: 1. **In `__cc-option`
function (line 45)**: Changed from: ```makefile $(1) -Werror $(2) $(3)
-c -x c /dev/null -o "$$TMP",$(3),$(4) ``` to: ```makefile $(1) -Werror
$(2) $(3:-Wno-%=-W%) -c -x c /dev/null -o "$$TMP",$(3),$(4) ``` 2. **In
`cc-disable-warning` function (line 60)**: Simplified from: ```makefile
cc-disable-warning = $(if $(call cc-option,-W$(strip $1)),-Wno-$(strip
$1)) ``` to: ```makefile cc-disable-warning = $(call cc-
option,-Wno-$(strip $1)) ``` ## Why This Should Be Backported ### 1.
**Fixes a Fundamental Build System Bug** The bug is that GCC silently
accepts unknown `-Wno-*` options and only warns about them when there
are other warnings in the source. This means `cc-option` would
incorrectly return "supported" for unsupported warning disable flags,
leading to build warnings that shouldn't exist. ### 2. **Improves Build
System Reliability** The fix ensures that build-time compiler feature
detection works correctly across all supported compiler versions,
preventing spurious warnings that could confuse developers and automated
build systems. ### 3. **Minimal Risk of Regression** - The change is
contained to the build system macros - It makes the behavior more
correct rather than changing functionality - The fix is elegant: it
transforms `-Wno-xyzzy` to `-Wxyzzy` for testing, then uses the original
form if supported - No actual kernel code is affected, only the build
logic ### 4. **Affects Critical Infrastructure Code** From my
examination of the kernel repository, `cc-disable-warning` and `cc-
option` are used extensively throughout the kernel build system. The fix
ensures these fundamental macros work correctly across all architectures
and configurations. ### 5. **Follows Stable Tree Criteria** -
**Important bug fix**: Yes, fixes incorrect compiler option detection -
**Minimal risk**: Yes, only changes build macros, no functional code
changes - **Contained scope**: Yes, limited to
`scripts/Makefile.compiler` - **No architectural changes**: Correct,
just fixes existing functionality ### 6. **Historical Precedent**
Looking at the similar commits provided, commits that fix build system
issues and compiler option handling (like the similar commits marked
"NO" but for different reasons) are generally good candidates when they
fix fundamental problems rather than just optimization cleanups. The
commit addresses a real problem where the build system could accept
invalid compiler options, leading to confusing warnings. This type of
fundamental correctness fix is exactly what stable trees are meant to
include.

 scripts/Makefile.compiler | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index f4fcc1eaaeaee..65cfa72e376be 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -43,7 +43,7 @@ as-instr = $(call try-run,\
 # __cc-option
 # Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
 __cc-option = $(call try-run,\
-	$(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4))
+	$(1) -Werror $(2) $(3:-Wno-%=-W%) -c -x c /dev/null -o "$$TMP",$(3),$(4))
 
 # cc-option
 # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
@@ -57,7 +57,7 @@ cc-option-yn = $(if $(call cc-option,$1),y,n)
 
 # cc-disable-warning
 # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
-cc-disable-warning = $(if $(call cc-option,-W$(strip $1)),-Wno-$(strip $1))
+cc-disable-warning = $(call cc-option,-Wno-$(strip $1))
 
 # gcc-min-version
 # Usage: cflags-$(call gcc-min-version, 70100) += -foo
-- 
2.39.5


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ