From: Greg Kroah-Hartman Date: Tue, 27 May 2025 15:19:22 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v6.12.31~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=566c788ce63f7bfd04b1029033820801d76b20b0;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: kbuild-disable-wdefault-const-init-unsafe.patch --- diff --git a/queue-5.10/kbuild-disable-wdefault-const-init-unsafe.patch b/queue-5.10/kbuild-disable-wdefault-const-init-unsafe.patch new file mode 100644 index 0000000000..497c8ab972 --- /dev/null +++ b/queue-5.10/kbuild-disable-wdefault-const-init-unsafe.patch @@ -0,0 +1,112 @@ +From 3b25f5705a71b11c73c3bb0e8cbe2bfa10a0a58a Mon Sep 17 00:00:00 2001 +From: Nathan Chancellor +Date: Tue, 6 May 2025 14:02:01 -0700 +Subject: kbuild: Disable -Wdefault-const-init-unsafe + +From: Nathan Chancellor + +commit d0afcfeb9e3810ec89d1ffde1a0e36621bb75dca upstream. + +A new on by default warning in clang [1] aims to flags instances where +const variables without static or thread local storage or const members +in aggregate types are not initialized because it can lead to an +indeterminate value. This is quite noisy for the kernel due to +instances originating from header files such as: + + drivers/gpu/drm/i915/gt/intel_ring.h:62:2: error: default initialization of an object of type 'typeof (ring->size)' (aka 'const unsigned int') leaves the object uninitialized [-Werror,-Wdefault-const-init-var-unsafe] + 62 | typecheck(typeof(ring->size), next); + | ^ + include/linux/typecheck.h:10:9: note: expanded from macro 'typecheck' + 10 | ({ type __dummy; \ + | ^ + + include/net/ip.h:478:14: error: default initialization of an object of type 'typeof (rt->dst.expires)' (aka 'const unsigned long') leaves the object uninitialized [-Werror,-Wdefault-const-init-var-unsafe] + 478 | if (mtu && time_before(jiffies, rt->dst.expires)) + | ^ + include/linux/jiffies.h:138:26: note: expanded from macro 'time_before' + 138 | #define time_before(a,b) time_after(b,a) + | ^ + include/linux/jiffies.h:128:3: note: expanded from macro 'time_after' + 128 | (typecheck(unsigned long, a) && \ + | ^ + include/linux/typecheck.h:11:12: note: expanded from macro 'typecheck' + 11 | typeof(x) __dummy2; \ + | ^ + + include/linux/list.h:409:27: warning: default initialization of an object of type 'union (unnamed union at include/linux/list.h:409:27)' with const member leaves the object uninitialized [-Wdefault-const-init-field-unsafe] + 409 | struct list_head *next = smp_load_acquire(&head->next); + | ^ + include/asm-generic/barrier.h:176:29: note: expanded from macro 'smp_load_acquire' + 176 | #define smp_load_acquire(p) __smp_load_acquire(p) + | ^ + arch/arm64/include/asm/barrier.h:164:59: note: expanded from macro '__smp_load_acquire' + 164 | union { __unqual_scalar_typeof(*p) __val; char __c[1]; } __u; \ + | ^ + include/linux/list.h:409:27: note: member '__val' declared 'const' here + + crypto/scatterwalk.c:66:22: error: default initialization of an object of type 'struct scatter_walk' with const member leaves the object uninitialized [-Werror,-Wdefault-const-init-field-unsafe] + 66 | struct scatter_walk walk; + | ^ + include/crypto/algapi.h:112:15: note: member 'addr' declared 'const' here + 112 | void *const addr; + | ^ + + fs/hugetlbfs/inode.c:733:24: error: default initialization of an object of type 'struct vm_area_struct' with const member leaves the object uninitialized [-Werror,-Wdefault-const-init-field-unsafe] + 733 | struct vm_area_struct pseudo_vma; + | ^ + include/linux/mm_types.h:803:20: note: member 'vm_flags' declared 'const' here + 803 | const vm_flags_t vm_flags; + | ^ + +Silencing the instances from typecheck.h is difficult because '= {}' is +not available in older but supported compilers and '= {0}' would cause +warnings about a literal 0 being treated as NULL. While it might be +possible to come up with a local hack to silence the warning for +clang-21+, it may not be worth it since -Wuninitialized will still +trigger if an uninitialized const variable is actually used. + +In all audited cases of the "field" variant of the warning, the members +are either not used in the particular call path, modified through other +means such as memset() / memcpy() because the containing object is not +const, or are within a union with other non-const members. + +Since this warning does not appear to have a high signal to noise ratio, +just disable it. + +Cc: stable@vger.kernel.org +Link: https://github.com/llvm/llvm-project/commit/576161cb6069e2c7656a8ef530727a0f4aefff30 [1] +Reported-by: Linux Kernel Functional Testing +Closes: https://lore.kernel.org/CA+G9fYuNjKcxFKS_MKPRuga32XbndkLGcY-PVuoSwzv6VWbY=w@mail.gmail.com/ +Reported-by: Marcus Seyfarth +Closes: https://github.com/ClangBuiltLinux/linux/issues/2088 +Signed-off-by: Nathan Chancellor +Signed-off-by: Masahiro Yamada +[nathan: Apply change to Makefile instead of scripts/Makefile.extrawarn + due to lack of e88ca24319e4 in older stable branches] +Signed-off-by: Nathan Chancellor +Signed-off-by: Greg Kroah-Hartman +--- + Makefile | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/Makefile ++++ b/Makefile +@@ -795,6 +795,18 @@ KBUILD_CFLAGS += -Wno-gnu + # source of a reference will be _MergedGlobals and not on of the whitelisted names. + # See modpost pattern 2 + KBUILD_CFLAGS += -mno-global-merge ++ ++# Clang may emit a warning when a const variable, such as the dummy variables ++# in typecheck(), or const member of an aggregate type are not initialized, ++# which can result in unexpected behavior. However, in many audited cases of ++# the "field" variant of the warning, this is intentional because the field is ++# never used within a particular call path, the field is within a union with ++# other non-const members, or the containing object is not const so the field ++# can be modified via memcpy() / memset(). While the variable warning also gets ++# disabled with this same switch, there should not be too much coverage lost ++# because -Wuninitialized will still flag when an uninitialized const variable ++# is used. ++KBUILD_CFLAGS += $(call cc-disable-warning, default-const-init-unsafe) + else + + # Warn about unmarked fall-throughs in switch statement. diff --git a/queue-5.10/series b/queue-5.10/series index 2646bbcda5..66784b0d71 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -249,3 +249,4 @@ mm-page_alloc.c-avoid-infinite-retries-caused-by-cpuset-race.patch spi-spi-fsl-dspi-restrict-register-range-for-regmap-.patch spi-spi-fsl-dspi-halt-the-module-after-a-new-message.patch spi-spi-fsl-dspi-reset-sr-flags-before-sending-a-new.patch +kbuild-disable-wdefault-const-init-unsafe.patch