2023-10-19 10:01:43

by Yujie Liu

[permalink] [raw]
Subject: [PATCH] scripts/kernel-doc: match -Werror flag strictly

In our CI testing, we use some commands as below to only turn a specific
type of warnings into errors, but we notice that kernel-doc warnings
are also turned into errors unexpectedly.

$ make KCFLAGS="-Werror=return-type" W=1 kernel/fork.o

kernel/fork.c:1406: warning: Function parameter or member 'mm' not described in 'set_mm_exe_file'
kernel/fork.c:1406: warning: Function parameter or member 'new_exe_file' not described in 'set_mm_exe_file'
kernel/fork.c:1441: warning: Function parameter or member 'mm' not described in 'replace_mm_exe_file'
kernel/fork.c:1441: warning: Function parameter or member 'new_exe_file' not described in 'replace_mm_exe_file'
kernel/fork.c:1491: warning: Function parameter or member 'mm' not described in 'get_mm_exe_file'
kernel/fork.c:1510: warning: Function parameter or member 'task' not described in 'get_task_exe_file'
kernel/fork.c:1534: warning: Function parameter or member 'task' not described in 'get_task_mm'
kernel/fork.c:2109: warning: bad line:
kernel/fork.c:2130: warning: Function parameter or member 'ret' not described in '__pidfd_prepare'
kernel/fork.c:2130: warning: Excess function parameter 'pidfd' description in '__pidfd_prepare'
kernel/fork.c:2179: warning: Function parameter or member 'ret' not described in 'pidfd_prepare'
kernel/fork.c:2179: warning: Excess function parameter 'pidfd' description in 'pidfd_prepare'
kernel/fork.c:3195: warning: expecting prototype for clone3(). Prototype was for sys_clone3() instead
13 warnings as Errors
make[3]: *** [scripts/Makefile.build:243: kernel/fork.o] Error 13
make[3]: *** Deleting file 'kernel/fork.o'
make[2]: *** [scripts/Makefile.build:480: kernel] Error 2
make[1]: *** [/root/linux/Makefile:1913: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2

From the git history, commit 2c12c8103d8f ("scripts/kernel-doc:
optionally treat warnings as errors") introduces a new command-line
option to make kernel-doc warnings into errors. It can also read the
KCFLAGS environment variable to decide whether to turn this option on,
but the regex used for matching may not be accurate enough. It can match
both "-Werror" and "-Werror=<diagnostic-type>", so the option is turned
on by mistake in the latter case.

Fix this by strictly matching the flag "-Werror": there must be a space
or start of string in the front, and a space or end of string at the
end. This can handle all the following cases correctly:

KCFLAGS="-Werror" make W=1 [MATCH]
KCFLAGS="-Werror=return-type" make W=1 [NO MATCH]
KCFLAGS="-Wcomment -Werror -Wundef" make W=1 [MATCH]
KCFLAGS="-Wcomment -Werror=return-type -Wundef" make W=1 [NO MATCH]

Fixes: 2c12c8103d8f ("scripts/kernel-doc: optionally treat warnings as errors")
Signed-off-by: Yujie Liu <[email protected]>
---
scripts/kernel-doc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 6e199a745ccb..d660e1f4b483 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -185,7 +185,7 @@ if (defined($ENV{'KBUILD_VERBOSE'}) && $ENV{'KBUILD_VERBOSE'} =~ '1') {
if (defined($ENV{'KCFLAGS'})) {
my $kcflags = "$ENV{'KCFLAGS'}";

- if ($kcflags =~ /Werror/) {
+ if ($kcflags =~ /(?<=^|\s)-Werror(?=$|\s)/) {
$Werror = 1;
}
}
--
2.34.1


2023-10-23 02:37:14

by Jonathan Corbet

[permalink] [raw]
Subject: Re: [PATCH] scripts/kernel-doc: match -Werror flag strictly

Yujie Liu <[email protected]> writes:

> In our CI testing, we use some commands as below to only turn a specific
> type of warnings into errors, but we notice that kernel-doc warnings
> are also turned into errors unexpectedly.
>
> $ make KCFLAGS="-Werror=return-type" W=1 kernel/fork.o
>
> kernel/fork.c:1406: warning: Function parameter or member 'mm' not described in 'set_mm_exe_file'
> kernel/fork.c:1406: warning: Function parameter or member 'new_exe_file' not described in 'set_mm_exe_file'
> kernel/fork.c:1441: warning: Function parameter or member 'mm' not described in 'replace_mm_exe_file'
> kernel/fork.c:1441: warning: Function parameter or member 'new_exe_file' not described in 'replace_mm_exe_file'
> kernel/fork.c:1491: warning: Function parameter or member 'mm' not described in 'get_mm_exe_file'
> kernel/fork.c:1510: warning: Function parameter or member 'task' not described in 'get_task_exe_file'
> kernel/fork.c:1534: warning: Function parameter or member 'task' not described in 'get_task_mm'
> kernel/fork.c:2109: warning: bad line:
> kernel/fork.c:2130: warning: Function parameter or member 'ret' not described in '__pidfd_prepare'
> kernel/fork.c:2130: warning: Excess function parameter 'pidfd' description in '__pidfd_prepare'
> kernel/fork.c:2179: warning: Function parameter or member 'ret' not described in 'pidfd_prepare'
> kernel/fork.c:2179: warning: Excess function parameter 'pidfd' description in 'pidfd_prepare'
> kernel/fork.c:3195: warning: expecting prototype for clone3(). Prototype was for sys_clone3() instead
> 13 warnings as Errors
> make[3]: *** [scripts/Makefile.build:243: kernel/fork.o] Error 13
> make[3]: *** Deleting file 'kernel/fork.o'
> make[2]: *** [scripts/Makefile.build:480: kernel] Error 2
> make[1]: *** [/root/linux/Makefile:1913: .] Error 2
> make: *** [Makefile:234: __sub-make] Error 2
>
> From the git history, commit 2c12c8103d8f ("scripts/kernel-doc:
> optionally treat warnings as errors") introduces a new command-line
> option to make kernel-doc warnings into errors. It can also read the
> KCFLAGS environment variable to decide whether to turn this option on,
> but the regex used for matching may not be accurate enough. It can match
> both "-Werror" and "-Werror=<diagnostic-type>", so the option is turned
> on by mistake in the latter case.
>
> Fix this by strictly matching the flag "-Werror": there must be a space
> or start of string in the front, and a space or end of string at the
> end. This can handle all the following cases correctly:
>
> KCFLAGS="-Werror" make W=1 [MATCH]
> KCFLAGS="-Werror=return-type" make W=1 [NO MATCH]
> KCFLAGS="-Wcomment -Werror -Wundef" make W=1 [MATCH]
> KCFLAGS="-Wcomment -Werror=return-type -Wundef" make W=1 [NO MATCH]
>
> Fixes: 2c12c8103d8f ("scripts/kernel-doc: optionally treat warnings as errors")
> Signed-off-by: Yujie Liu <[email protected]>
> ---
> scripts/kernel-doc | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

Applied, thanks,

jon