On Tue, 20 Feb 2024 at 11:57, Linus Torvalds torvalds@linux-foundation.org wrote:
It turns out that that commit is buggy for another reason, but it's hidden by the fact that apparently KUNIT_ASSERT_FALSE_MSG() doesn't check the format string.
The fix for that is this:
--- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -579,7 +579,7 @@ void __printf(2, 3) kunit_log_append(struct string_stream *log, const char *fmt,
void __noreturn __kunit_abort(struct kunit *test);
-void __kunit_do_failed_assertion(struct kunit *test, +void __printf(6,7) __kunit_do_failed_assertion(struct kunit *test, const struct kunit_loc *loc, enum kunit_assert_type type, const struct kunit_assert *assert,
but that causes a *lot* of noise (not just in drm_buddy_test.c), so I'm not going to apply that fix as-is. Clearly there's a lot of incorrect format parameters that have never been checked.
Instead adding Shuah and the KUnit people to the participants, and hoping that they will fix this up and we can get the format fixes for KUnit in the 6.9 timeframe.
Side note: when I apply the above patch, the suggestions gcc spews out look invalid. Gcc seems to suggest turning a a format string of '%d" to "%ld" for a size_t variable. That's wrong. It should be "%zu".
A 'size_t' can in fact be 'unsigned int' on some platforms (not just in theory), so %ld is really incorrect not just from a sign perspective.
Anyway, I guess I will commit the immediate drm_buddy_test.c fix to get rid of the build issue, but the KUnit message format string issue will have to be a "let's get this fixed up _later_" issue.
Linus