[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <b32d95a1-8a49-65ef-4ddd-fe86a7ca01d5@kernel.org>
Date: Fri, 19 Jul 2019 16:25:46 -0600
From: shuah <shuah@...nel.org>
To: Aleksa Sarai <cyphar@...har.com>,
Al Viro <viro@...iv.linux.org.uk>,
Jeff Layton <jlayton@...nel.org>,
"J. Bruce Fields" <bfields@...ldses.org>,
Arnd Bergmann <arnd@...db.de>,
David Howells <dhowells@...hat.com>,
Shuah Khan <skhan@...uxfoundation.org>
Cc: Eric Biederman <ebiederm@...ssion.com>,
Andy Lutomirski <luto@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Alexei Starovoitov <ast@...nel.org>,
Kees Cook <keescook@...omium.org>,
Jann Horn <jannh@...gle.com>,
Christian Brauner <christian@...uner.io>,
Tycho Andersen <tycho@...ho.ws>,
David Drysdale <drysdale@...gle.com>,
Chanho Min <chanho.min@....com>,
Oleg Nesterov <oleg@...hat.com>, Aleksa Sarai <asarai@...e.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
containers@...ts.linux-foundation.org, linux-alpha@...r.kernel.org,
linux-api@...r.kernel.org, linux-arch@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-fsdevel@...r.kernel.org, linux-ia64@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-kselftest@...r.kernel.org,
linux-m68k@...ts.linux-m68k.org, linux-mips@...r.kernel.org,
linux-parisc@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org,
linux-s390@...r.kernel.org, linux-sh@...r.kernel.org,
linux-xtensa@...ux-xtensa.org, sparclinux@...r.kernel.org,
shuah <shuah@...nel.org>
Subject: Re: [PATCH v10 8/9] kselftest: save-and-restore errno to allow for %m
formatting
On 7/19/19 10:42 AM, Aleksa Sarai wrote:
> Previously, using "%m" in a ksft_* format string can result in strange
> output because the errno value wasn't saved before calling other libc
> functions. The solution is to simply save and restore the errno before
> we format the user-supplied format string.
>
> Signed-off-by: Aleksa Sarai <cyphar@...har.com>
> ---
> tools/testing/selftests/kselftest.h | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h
> index ec15c4f6af55..0ac49d91a260 100644
> --- a/tools/testing/selftests/kselftest.h
> +++ b/tools/testing/selftests/kselftest.h
> @@ -10,6 +10,7 @@
> #ifndef __KSELFTEST_H
> #define __KSELFTEST_H
>
> +#include <errno.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <stdarg.h>
> @@ -81,58 +82,68 @@ static inline void ksft_print_cnts(void)
>
> static inline void ksft_print_msg(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> va_start(args, msg);
> printf("# ");
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> }
>
> static inline void ksft_test_result_pass(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> ksft_cnt.ksft_pass++;
>
> va_start(args, msg);
> printf("ok %d ", ksft_test_num());
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> }
>
> static inline void ksft_test_result_fail(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> ksft_cnt.ksft_fail++;
>
> va_start(args, msg);
> printf("not ok %d ", ksft_test_num());
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> }
>
> static inline void ksft_test_result_skip(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> ksft_cnt.ksft_xskip++;
>
> va_start(args, msg);
> printf("not ok %d # SKIP ", ksft_test_num());
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> }
>
> static inline void ksft_test_result_error(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> ksft_cnt.ksft_error++;
>
> va_start(args, msg);
> printf("not ok %d # error ", ksft_test_num());
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> }
> @@ -152,10 +163,12 @@ static inline int ksft_exit_fail(void)
>
> static inline int ksft_exit_fail_msg(const char *msg, ...)
> {
> + int saved_errno = errno;
> va_list args;
>
> va_start(args, msg);
> printf("Bail out! ");
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
>
> @@ -178,10 +191,12 @@ static inline int ksft_exit_xpass(void)
> static inline int ksft_exit_skip(const char *msg, ...)
> {
> if (msg) {
> + int saved_errno = errno;
> va_list args;
>
> va_start(args, msg);
> printf("not ok %d # SKIP ", 1 + ksft_test_num());
> + errno = saved_errno;
> vprintf(msg, args);
> va_end(args);
> } else {
>
Hi Aleksa,
Can you send this patch separate from the patch series. I will apply
this as bug fix to 5.3-rc2 or rc3.
This isn't part of this series anyway and I would like to get this in
right away.
thanks,
-- Shuah
Powered by blists - more mailing lists