Message ID | 20230928-ktap-exec-v1-1-1013a2db0426@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kselftest/exec: Convert execveat test to KTAP output | expand |
On Thu, Sep 28, 2023 at 04:38:11PM +0200, Mark Brown wrote: > The standard library perror() function provides a convenient way to print > an error message based on the current errno but this doesn't play nicely > with KTAP output. Provide a helper which does an equivalent thing in a KTAP > compatible format. > > nolibc doesn't have a strerror() and adding the table of strings required > doesn't seem like a good fit for what it's trying to do so when we're using > that only print the errno. > > Signed-off-by: Mark Brown <broonie@kernel.org> Oh, interesting... what environment ends up without strerror()? Reviewed-by: Kees Cook <keescook@chromium.org>
On Thu, Sep 28, 2023 at 05:48:22PM -0700, Kees Cook wrote: > > nolibc doesn't have a strerror() and adding the table of strings required > > doesn't seem like a good fit for what it's trying to do so when we're using > > that only print the errno. > Oh, interesting... what environment ends up without strerror()? Like I say it's for nolibc - it's just some header files (all in the kernel source), while it generally aims to be libc compatible it's intentionally very small.
On Fri, Sep 29, 2023 at 09:50:53AM +0200, Mark Brown wrote: > On Thu, Sep 28, 2023 at 05:48:22PM -0700, Kees Cook wrote: > > > > nolibc doesn't have a strerror() and adding the table of strings required > > > doesn't seem like a good fit for what it's trying to do so when we're using > > > that only print the errno. > > > Oh, interesting... what environment ends up without strerror()? > > Like I say it's for nolibc - it's just some header files (all in the > kernel source), while it generally aims to be libc compatible it's > intentionally very small. Right, I mean, how would one normally encounter this environment? Running the selftests on m68k userspace or something?
On Fri, Sep 29, 2023 at 10:31:56AM -0700, Kees Cook wrote: > On Fri, Sep 29, 2023 at 09:50:53AM +0200, Mark Brown wrote: > > Like I say it's for nolibc - it's just some header files (all in the > > kernel source), while it generally aims to be libc compatible it's > > intentionally very small. > Right, I mean, how would one normally encounter this environment? Running > the selftests on m68k userspace or something? There's a bunch of selftests that cover interfaces that are intended to be used by libc which are built with nolibc in order to avoid the tests and glibc stomping over each other.
diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h index 529d29a35900..af9f1202d423 100644 --- a/tools/testing/selftests/kselftest.h +++ b/tools/testing/selftests/kselftest.h @@ -48,6 +48,7 @@ #include <stdlib.h> #include <unistd.h> #include <stdarg.h> +#include <string.h> #include <stdio.h> #endif @@ -155,6 +156,19 @@ static inline void ksft_print_msg(const char *msg, ...) va_end(args); } +static inline void ksft_perror(const char *msg) +{ +#ifndef NOLIBC + ksft_print_msg("%s: %s (%d)\n", msg, strerror(errno), errno); +#else + /* + * nolibc doesn't provide strerror() and it seems + * inappropriate to add one, just print the errno. + */ + ksft_print_msg("%s: %d)\n", msg, errno); +#endif +} + static inline void ksft_test_result_pass(const char *msg, ...) { int saved_errno = errno;
The standard library perror() function provides a convenient way to print an error message based on the current errno but this doesn't play nicely with KTAP output. Provide a helper which does an equivalent thing in a KTAP compatible format. nolibc doesn't have a strerror() and adding the table of strings required doesn't seem like a good fit for what it's trying to do so when we're using that only print the errno. Signed-off-by: Mark Brown <broonie@kernel.org> --- tools/testing/selftests/kselftest.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)