fortify: Provide KUnit counters for failure testing
authorKees Cook <keescook@chromium.org>
Fri, 7 Apr 2023 19:27:14 +0000 (12:27 -0700)
committerKees Cook <keescook@chromium.org>
Thu, 29 Feb 2024 21:38:02 +0000 (13:38 -0800)
commit4ce615e798a752d4431fcc52960478906dec2f0e
treed76038c7680c29c84a99c9c02dd327e0788e685a
parent1a78f8cb5daac77405e449f5305ad72c01818a46
fortify: Provide KUnit counters for failure testing

The standard C string APIs were not designed to have a failure mode;
they were expected to always succeed without memory safety issues.
Normally, CONFIG_FORTIFY_SOURCE will use fortify_panic() to stop
processing, as truncating a read or write may provide an even worse
system state. However, this creates a problem for testing under things
like KUnit, which needs a way to survive failures.

When building with CONFIG_KUNIT, provide a failure path for all users
of fortify_panic, and track whether the failure was a read overflow or
a write overflow, for KUnit tests to examine. Inspired by similar logic
in the slab tests.

Signed-off-by: Kees Cook <keescook@chromium.org>
include/linux/fortify-string.h
lib/fortify_kunit.c
lib/string_helpers.c