The all-zero pattern is one of the more probable out-of-bound writes so
add a special case to not accidentally accept it.
Also it enables the reliable detection of stack protector initialization
during testing.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
 void __stack_chk_init(void)
 {
        my_syscall3(__NR_getrandom, &__stack_chk_guard, sizeof(__stack_chk_guard), 0);
-       /* a bit more randomness in case getrandom() fails */
-       __stack_chk_guard ^= (uintptr_t) &__stack_chk_guard;
+       /* a bit more randomness in case getrandom() fails, ensure the guard is never 0 */
+       if (__stack_chk_guard != (uintptr_t) &__stack_chk_guard)
+               __stack_chk_guard ^= (uintptr_t) &__stack_chk_guard;
 }
 #endif /* defined(NOLIBC_STACKPROTECTOR) */