From: Shuah Khan <skhan@linuxfoundation.org>
To: Nathan Chancellor <nathan@kernel.org>,
tglx@linutronix.de, shuah@kernel.org,
Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: oleg@redhat.com, anna-maria@linutronix.de, frederic@kernel.org,
ndesaulniers@google.com, morbo@google.com,
justinstitt@google.com, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org, llvm@lists.linux.dev,
patches@lists.linux.dev, John Stultz <jstultz@google.com>,
Shuah Khan <skhan@linuxfoundation.org>
Subject: Re: [PATCH] kselftest: Mark functions that unconditionally call exit() as __noreturn
Date: Thu, 11 Apr 2024 15:11:07 -0600 [thread overview]
Message-ID: <8254ab4d-9cb6-402e-80dd-d9ec70d77de5@linuxfoundation.org> (raw)
In-Reply-To: <20240411-mark-kselftest-exit-funcs-noreturn-v1-1-b027c948f586@kernel.org>
On 4/11/24 12:45, Nathan Chancellor wrote:
> After commit 6d029c25b71f ("selftests/timers/posix_timers: Reimplement
> check_timer_distribution()"), clang warns:
>
> tools/testing/selftests/timers/../kselftest.h:398:6: warning: variable 'major' is used uninitialized whenever '||' condition is true [-Wsometimes-uninitialized]
> 398 | if (uname(&info) || sscanf(info.release, "%u.%u.", &major, &minor) != 2)
> | ^~~~~~~~~~~~
> tools/testing/selftests/timers/../kselftest.h:401:9: note: uninitialized use occurs here
> 401 | return major > min_major || (major == min_major && minor >= min_minor);
> | ^~~~~
> tools/testing/selftests/timers/../kselftest.h:398:6: note: remove the '||' if its condition is always false
> 398 | if (uname(&info) || sscanf(info.release, "%u.%u.", &major, &minor) != 2)
> | ^~~~~~~~~~~~~~~
> tools/testing/selftests/timers/../kselftest.h:395:20: note: initialize the variable 'major' to silence this warning
> 395 | unsigned int major, minor;
> | ^
> | = 0
>
> This is a false positive because if uname() fails, ksft_exit_fail_msg()
> will be called, which unconditionally calls exit(), a noreturn function.
> However, clang does not know that ksft_exit_fail_msg() will call exit()
> at the point in the pipeline that the warning is emitted because
> inlining has not occurred, so it assumes control flow will resume
> normally after ksft_exit_fail_msg() is called.
>
> Make it clear to clang that all of the functions that call exit()
> unconditionally in kselftest.h are noreturn transitively by marking them
> explicitly with '__attribute__((__noreturn__))', which clears up the
> warning above and any future warnings that may appear for the same
> reason.
>
> Fixes: 6d029c25b71f ("selftests/timers/posix_timers: Reimplement check_timer_distribution()")
> Reported-by: John Stultz <jstultz@google.com>
> Closes: https://lore.kernel.org/all/20240410232637.4135564-2-jstultz@google.com/
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> ---
> I have based this change on timers/urgent, as the commit that introduces
> this particular warning is there and it is marked for stable, even
> though this appears to be a generic kselftest issue. I think it makes
> the most sense for this change to go via timers/urgent with Shuah's ack.
> While __noreturn with a return type other than 'void' does not make much
> sense semantically, there are many places that these functions are used
> as the return value for other functions such as main(), so I did not
> change the return type of these functions from 'int' to 'void' to
> minimize the necessary changes for a backport (it is an existing issue
> anyways).
>
> I see there is another instance of this problem that will need to be
> addressed in -next, introduced by commit f07041728422 ("selftests: add
> ksft_exit_fail_perror()").
Thank you. Assuming this is going through tip/timers/urgent
Acked-by: Shuah Khan <skhan@linuxfoundation.org>
Usama, please send patch fixing this problem in next on top of
commit f07041728422 ("selftests: add
> ksft_exit_fail_perror()").
thanks,
-- Shuah
next prev parent reply other threads:[~2024-04-11 21:11 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-11 18:45 [PATCH] kselftest: Mark functions that unconditionally call exit() as __noreturn Nathan Chancellor
2024-04-11 21:11 ` Shuah Khan [this message]
2024-04-12 12:05 ` Thomas Gleixner
2024-04-12 16:09 ` Nathan Chancellor
2024-04-12 16:08 ` Bill Wendling
2024-04-12 16:11 ` Bill Wendling
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8254ab4d-9cb6-402e-80dd-d9ec70d77de5@linuxfoundation.org \
--to=skhan@linuxfoundation.org \
--cc=anna-maria@linutronix.de \
--cc=frederic@kernel.org \
--cc=jstultz@google.com \
--cc=justinstitt@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=oleg@redhat.com \
--cc=patches@lists.linux.dev \
--cc=shuah@kernel.org \
--cc=tglx@linutronix.de \
--cc=usama.anjum@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox