Commit 19b8a76cd99b for kernel

commit 19b8a76cd99bde6d299e60490f3e62b8d3df3997
Author: Wake Liu <wakel@google.com>
Date:   Wed Dec 24 16:41:20 2025 +0800

    kselftest/harness: Use helper to avoid zero-size memset warning

    When building kselftests with a toolchain that enables source
    fortification (e.g., Android's build environment, which uses
    -D_FORTIFY_SOURCE=3), a build failure occurs in tests that use an
    empty FIXTURE().

    The root cause is that an empty fixture struct results in
    `sizeof(self_private)` evaluating to 0. The compiler's fortification
    checks then detect the `memset()` call with a compile-time constant size
    of 0, issuing a `-Wuser-defined-warnings` which is promoted to an error
    by `-Werror`.

    An initial attempt to guard the call with `if (sizeof(self_private) > 0)`
    was insufficient. The compiler's static analysis is aggressive enough
    to flag the `memset(..., 0)` pattern before evaluating the conditional,
    thus still triggering the error.

    To resolve this robustly, this change introduces a `static inline`
    helper function, `__kselftest_memset_safe()`. This function wraps the
    size check and the `memset()` call. By replacing the direct `memset()`
    in the `__TEST_F_IMPL` macro with a call to this helper, we create an
    abstraction boundary. This prevents the compiler's static analyzer from
    "seeing" the problematic pattern at the macro expansion site, resolving
    the build failure.

    Build Context:
    Compiler: Android (14488419, +pgo, +bolt, +lto, +mlgo, based on r584948) clang version 22.0.0 (https://android.googlesource.com/toolchain/llvm-project 2d65e4108033380e6fe8e08b1f1826cd2bfb0c99)
    Relevant Options: -O2 -Wall -Werror -D_FORTIFY_SOURCE=3 -target i686-linux-android10000

    Test: m kselftest_futex_futex_requeue_pi

    Removed Gerrit Change-Id
    Shuah Khan <skhan@linuxfoundation.org>

    Link: https://lore.kernel.org/r/20251224084120.249417-1-wakel@google.com
    Signed-off-by: Wake Liu <wakel@google.com>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>

diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
index baae6b7ded41..16a119a4656c 100644
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -70,6 +70,12 @@

 #include "kselftest.h"

+static inline void __kselftest_memset_safe(void *s, int c, size_t n)
+{
+	if (n > 0)
+		memset(s, c, n);
+}
+
 #define TEST_TIMEOUT_DEFAULT 30

 /* Utilities exposed to the test definitions */
@@ -416,7 +422,7 @@
 				self = mmap(NULL, sizeof(*self), PROT_READ | PROT_WRITE, \
 					MAP_SHARED | MAP_ANONYMOUS, -1, 0); \
 			} else { \
-				memset(&self_private, 0, sizeof(self_private)); \
+				__kselftest_memset_safe(&self_private, 0, sizeof(self_private)); \
 				self = &self_private; \
 			} \
 		} \