Patch "kbuild: Use -fzero-init-padding-bits=all" has been added to the 6.13-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    kbuild: Use -fzero-init-padding-bits=all

to the 6.13-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kbuild-use-fzero-init-padding-bits-all.patch
and it can be found in the queue-6.13 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 332fb6f6607369300b75eaad1ebc4252cba2e3cd
Author: Kees Cook <kees@xxxxxxxxxx>
Date:   Mon Jan 27 11:10:28 2025 -0800

    kbuild: Use -fzero-init-padding-bits=all
    
    [ Upstream commit dce4aab8441d285b9a78b33753e0bf583c1320ee ]
    
    GCC 15 introduces a regression in "= { 0 }" style initialization of
    unions that Linux has depended on for eliminating uninitialized variable
    contents. GCC does not seem likely to fix it[1], instead suggesting[2]
    that affected projects start using -fzero-init-padding-bits=unions.
    
    To avoid future surprises beyond just the current situation with unions,
    enable -fzero-init-padding-bits=all when available (GCC 15+). This will
    correctly zero padding bits in unions and structs that might have been
    left uninitialized, and will make sure there is no immediate regression
    in union initializations. As seen in the stackinit KUnit selftest union
    cases, which were passing before, were failing under GCC 15:
    
        not ok 18 test_small_start_old_zero
        ok 29 test_small_start_dynamic_partial # SKIP XFAIL uninit bytes: 63
        ok 32 test_small_start_assigned_dynamic_partial # SKIP XFAIL uninit bytes: 63
        ok 67 test_small_start_static_partial # SKIP XFAIL uninit bytes: 63
        ok 70 test_small_start_static_all # SKIP XFAIL uninit bytes: 56
        ok 73 test_small_start_dynamic_all # SKIP XFAIL uninit bytes: 56
        ok 82 test_small_start_assigned_static_partial # SKIP XFAIL uninit bytes: 63
        ok 85 test_small_start_assigned_static_all # SKIP XFAIL uninit bytes: 56
        ok 88 test_small_start_assigned_dynamic_all # SKIP XFAIL uninit bytes: 56
    
    The above all now pass again with -fzero-init-padding-bits=all added.
    
    This also fixes the following cases for struct initialization that had
    been XFAIL until now because there was no compiler support beyond the
    larger "-ftrivial-auto-var-init=zero" option:
    
        ok 38 test_small_hole_static_all # SKIP XFAIL uninit bytes: 3
        ok 39 test_big_hole_static_all # SKIP XFAIL uninit bytes: 124
        ok 40 test_trailing_hole_static_all # SKIP XFAIL uninit bytes: 7
        ok 42 test_small_hole_dynamic_all # SKIP XFAIL uninit bytes: 3
        ok 43 test_big_hole_dynamic_all # SKIP XFAIL uninit bytes: 124
        ok 44 test_trailing_hole_dynamic_all # SKIP XFAIL uninit bytes: 7
        ok 58 test_small_hole_assigned_static_all # SKIP XFAIL uninit bytes: 3
        ok 59 test_big_hole_assigned_static_all # SKIP XFAIL uninit bytes: 124
        ok 60 test_trailing_hole_assigned_static_all # SKIP XFAIL uninit bytes: 7
        ok 62 test_small_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 3
        ok 63 test_big_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 124
        ok 64 test_trailing_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 7
    
    All of the above now pass when built under GCC 15. Tests can be seen
    with:
    
        ./tools/testing/kunit/kunit.py run stackinit --arch=x86_64 \
            --make_option CC=gcc-15
    
    Clang continues to fully initialize these kinds of variables[3] without
    additional flags.
    
    Suggested-by: Jakub Jelinek <jakub@xxxxxxxxxx>
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118403 [1]
    Link: https://lore.kernel.org/linux-toolchains/Z0hRrrNU3Q+ro2T7@tucnak/ [2]
    Link: https://github.com/llvm/llvm-project/commit/7a086e1b2dc05f54afae3591614feede727601fa [3]
    Reviewed-by: Nathan Chancellor <nathan@xxxxxxxxxx>
    Acked-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20250127191031.245214-3-kees@xxxxxxxxxx
    Signed-off-by: Kees Cook <kees@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index d75897559d184..dc081cf46d211 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -82,6 +82,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
 # Warn if there is an enum types mismatch
 KBUILD_CFLAGS += $(call cc-option,-Wenum-conversion)
 
+# Explicitly clear padding bits during variable initialization
+KBUILD_CFLAGS += $(call cc-option,-fzero-init-padding-bits=all)
+
 KBUILD_CFLAGS += -Wextra
 KBUILD_CFLAGS += -Wunused
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux