summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-10-06 20:41:12 +0100
committerSam James <sam@gentoo.org>2023-10-06 20:41:30 +0100
commitae36ddf9ac48b52efa7fb9010830ade6be73d659 (patch)
treea02ac340a24b182f3f3ed647a8d3dea51084fb0d
parent6.5: new patchset, clone of 6.4 (diff)
downloadlinux-headers-patches-ae36ddf9ac48b52efa7fb9010830ade6be73d659.tar.gz
linux-headers-patches-ae36ddf9ac48b52efa7fb9010830ade6be73d659.tar.bz2
linux-headers-patches-ae36ddf9ac48b52efa7fb9010830ade6be73d659.zip
6.5: add patches
* 6.5/00_all_0003-Compiler-Attributes-counted_by-Adjust-name-and-ident.patch: cc17adeef726a0df7fe5df7585a07128cd0c6070 ('Compiler Attributes: counted_by: Adjust name and identifier expansion') * 6.5/00_all_0004-uapi-stddef.h-Fix-header-guard-location.patch: 721045f22e1a79cb04bfd4463cdf445108287666 ('uapi: stddef.h: Fix header guard location') * 6.5/00_all_0005-uapi-stddef.h-Fix-__DECLARE_FLEX_ARRAY-for-C.patch: 144ed54ed6ec4c099ff7c2b0064ed3ff89b73737 ('uapi: stddef.h: Fix __DECLARE_FLEX_ARRAY for C++') Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r--6.5/00_all_0003-Compiler-Attributes-counted_by-Adjust-name-and-ident.patch87
-rw-r--r--6.5/00_all_0004-uapi-stddef.h-Fix-header-guard-location.patch41
-rw-r--r--6.5/00_all_0005-uapi-stddef.h-Fix-__DECLARE_FLEX_ARRAY-for-C.patch77
3 files changed, 205 insertions, 0 deletions
diff --git a/6.5/00_all_0003-Compiler-Attributes-counted_by-Adjust-name-and-ident.patch b/6.5/00_all_0003-Compiler-Attributes-counted_by-Adjust-name-and-ident.patch
new file mode 100644
index 0000000..7365e3e
--- /dev/null
+++ b/6.5/00_all_0003-Compiler-Attributes-counted_by-Adjust-name-and-ident.patch
@@ -0,0 +1,87 @@
+From 564e31793787789b226a6f4b7081f2647a515b58 Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook@chromium.org>
+Date: Thu, 17 Aug 2023 13:06:03 -0700
+Subject: [PATCH 3/5] Compiler Attributes: counted_by: Adjust name and
+ identifier expansion
+
+[ Upstream commit c8248faf3ca276ebdf60f003b3e04bf764daba91 ]
+
+GCC and Clang's current RFCs name this attribute "counted_by", and have
+moved away from using a string for the member name. Update the kernel's
+macros to match. Additionally provide a UAPI no-op macro for UAPI structs
+that will gain annotations.
+
+Cc: Miguel Ojeda <ojeda@kernel.org>
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Fixes: dd06e72e68bc ("Compiler Attributes: Add __counted_by macro")
+Acked-by: Miguel Ojeda <ojeda@kernel.org>
+Reviewed-by: Nathan Chancellor <nathan@kernel.org>
+Link: https://lore.kernel.org/r/20230817200558.never.077-kees@kernel.org
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Stable-dep-of: 32a4ec211d41 ("uapi: stddef.h: Fix __DECLARE_FLEX_ARRAY for C++")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+(cherry picked from commit cc17adeef726a0df7fe5df7585a07128cd0c6070)
+---
+ include/linux/compiler_attributes.h | 26 +++++++++++++-------------
+ include/uapi/linux/stddef.h | 4 ++++
+ 2 files changed, 17 insertions(+), 13 deletions(-)
+
+diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
+index 00efa35c350f..28566624f008 100644
+--- a/include/linux/compiler_attributes.h
++++ b/include/linux/compiler_attributes.h
+@@ -94,6 +94,19 @@
+ # define __copy(symbol)
+ #endif
+
++/*
++ * Optional: only supported since gcc >= 14
++ * Optional: only supported since clang >= 18
++ *
++ * gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
++ * clang: https://reviews.llvm.org/D148381
++ */
++#if __has_attribute(__counted_by__)
++# define __counted_by(member) __attribute__((__counted_by__(member)))
++#else
++# define __counted_by(member)
++#endif
++
+ /*
+ * Optional: not supported by gcc
+ * Optional: only supported since clang >= 14.0
+@@ -129,19 +142,6 @@
+ # define __designated_init
+ #endif
+
+-/*
+- * Optional: only supported since gcc >= 14
+- * Optional: only supported since clang >= 17
+- *
+- * gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
+- * clang: https://reviews.llvm.org/D148381
+- */
+-#if __has_attribute(__element_count__)
+-# define __counted_by(member) __attribute__((__element_count__(#member)))
+-#else
+-# define __counted_by(member)
+-#endif
+-
+ /*
+ * Optional: only supported since clang >= 14.0
+ *
+diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h
+index 7837ba4fe728..7c3fc3980881 100644
+--- a/include/uapi/linux/stddef.h
++++ b/include/uapi/linux/stddef.h
+@@ -45,3 +45,7 @@
+ TYPE NAME[]; \
+ }
+ #endif
++
++#ifndef __counted_by
++#define __counted_by(m)
++#endif
+--
+2.42.0
+
diff --git a/6.5/00_all_0004-uapi-stddef.h-Fix-header-guard-location.patch b/6.5/00_all_0004-uapi-stddef.h-Fix-header-guard-location.patch
new file mode 100644
index 0000000..74fed6e
--- /dev/null
+++ b/6.5/00_all_0004-uapi-stddef.h-Fix-header-guard-location.patch
@@ -0,0 +1,41 @@
+From 4741f029c3eebaaaae560864d5442319ad1d7a02 Mon Sep 17 00:00:00 2001
+From: Alexey Dobriyan <adobriyan@gmail.com>
+Date: Tue, 12 Sep 2023 19:23:21 +0300
+Subject: [PATCH 4/5] uapi: stddef.h: Fix header guard location
+
+[ Upstream commit 531108ec5b5cd45ec6272a6115e73275baef7d22 ]
+
+The #endif for the header guard wasn't at the end of the header. This
+was harmless since the define that escaped was already testing for its
+own redefinition. Regardless, move the #endif to the correct place.
+
+Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
+Fixes: c8248faf3ca2 ("Compiler Attributes: counted_by: Adjust name and identifier expansion")
+Link: https://lore.kernel.org/r/b1f5081e-339d-421d-81b2-cbb94e1f6f5f@p183
+Co-developed-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Stable-dep-of: 32a4ec211d41 ("uapi: stddef.h: Fix __DECLARE_FLEX_ARRAY for C++")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+(cherry picked from commit 721045f22e1a79cb04bfd4463cdf445108287666)
+---
+ include/uapi/linux/stddef.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h
+index 7c3fc3980881..c027b2070d79 100644
+--- a/include/uapi/linux/stddef.h
++++ b/include/uapi/linux/stddef.h
+@@ -44,8 +44,9 @@
+ struct { } __empty_ ## NAME; \
+ TYPE NAME[]; \
+ }
+-#endif
+
+ #ifndef __counted_by
+ #define __counted_by(m)
+ #endif
++
++#endif /* _UAPI_LINUX_STDDEF_H */
+--
+2.42.0
+
diff --git a/6.5/00_all_0005-uapi-stddef.h-Fix-__DECLARE_FLEX_ARRAY-for-C.patch b/6.5/00_all_0005-uapi-stddef.h-Fix-__DECLARE_FLEX_ARRAY-for-C.patch
new file mode 100644
index 0000000..934774e
--- /dev/null
+++ b/6.5/00_all_0005-uapi-stddef.h-Fix-__DECLARE_FLEX_ARRAY-for-C.patch
@@ -0,0 +1,77 @@
+From 8ba6fb2fa507aec278bce9fec42b38be2231588e Mon Sep 17 00:00:00 2001
+From: Alexey Dobriyan <adobriyan@gmail.com>
+Date: Tue, 12 Sep 2023 19:22:24 +0300
+Subject: [PATCH 5/5] uapi: stddef.h: Fix __DECLARE_FLEX_ARRAY for C++
+
+[ Upstream commit 32a4ec211d4164e667d9d0b807fadf02053cd2e9 ]
+
+__DECLARE_FLEX_ARRAY(T, member) macro expands to
+
+ struct {
+ struct {} __empty_member;
+ T member[];
+ };
+
+which is subtly wrong in C++ because sizeof(struct{}) is 1 not 0,
+changing UAPI structures layouts.
+
+This can be fixed by expanding to
+
+ T member[];
+
+Now g++ doesn't like "T member[]" either, throwing errors on
+the following code:
+
+ struct S {
+ union {
+ T1 member1[];
+ T2 member2[];
+ };
+ };
+
+or
+
+ struct S {
+ T member[];
+ };
+
+Use "T member[0];" which seems to work and does the right thing wrt
+structure layout.
+
+Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
+Fixes: 3080ea5553cc ("stddef: Introduce DECLARE_FLEX_ARRAY() helper")
+Link: https://lore.kernel.org/r/97242381-f1ec-4a4a-9472-1a464f575657@p183
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+(cherry picked from commit 144ed54ed6ec4c099ff7c2b0064ed3ff89b73737)
+---
+ include/uapi/linux/stddef.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h
+index c027b2070d79..5c6c4269f7ef 100644
+--- a/include/uapi/linux/stddef.h
++++ b/include/uapi/linux/stddef.h
+@@ -29,6 +29,11 @@
+ struct TAG { MEMBERS } ATTRS NAME; \
+ }
+
++#ifdef __cplusplus
++/* sizeof(struct{}) is 1 in C++, not 0, can't use C version of the macro. */
++#define __DECLARE_FLEX_ARRAY(T, member) \
++ T member[0]
++#else
+ /**
+ * __DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union
+ *
+@@ -44,6 +49,7 @@
+ struct { } __empty_ ## NAME; \
+ TYPE NAME[]; \
+ }
++#endif
+
+ #ifndef __counted_by
+ #define __counted_by(m)
+--
+2.42.0
+