commit:     acc4fdace95188da98d42a6d022f435b5dd8e1c0
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 25 13:26:15 2024 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Thu Jan 25 13:26:15 2024 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=acc4fdac

Add gcc14 patches

btrfs: fix kvcalloc() arguments order
drm: i915: Adapt to -Walloc-size
objtool: Fix calloc call for new -Walloc-size

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README                                        | 12 +++++++
 2930_gcc14-btrfs-fix-kvcalloc-args-order.patch     | 37 +++++++++++++++++++
 2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch     | 37 +++++++++++++++++++
 ...jtool-Fix-calloc-call-for-new-Walloc-size.patch | 41 ++++++++++++++++++++++
 4 files changed, 127 insertions(+)

diff --git a/0000_README b/0000_README
index 99feeab4..9dc64b1b 100644
--- a/0000_README
+++ b/0000_README
@@ -83,6 +83,18 @@ Patch:  2920_sign-file-patch-for-libressl.patch
 From:   https://bugs.gentoo.org/717166
 Desc:   sign-file: full functionality with modern LibreSSL
 
+Patch:  2930_gcc14-btrfs-fix-kvcalloc-args-order.patch
+From:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+Desc:   btrfs: fix kvcalloc() arguments order
+
+Patch:  2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch
+From:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+Desc:   drm: i915: Adapt to -Walloc-size
+
+Patch:  2932_gcc14-objtool-Fix-calloc-call-for-new-Walloc-size.patch
+From:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+Desc:   objtool: Fix calloc call for new -Walloc-size
+
 Patch:  3000_Support-printing-firmware-info.patch
 From:   https://bugs.gentoo.org/732852
 Desc:   Print firmware info (Reqs CONFIG_GENTOO_PRINT_FIRMWARE_INFO). Thanks 
to Georgy Yakovlev

diff --git a/2930_gcc14-btrfs-fix-kvcalloc-args-order.patch 
b/2930_gcc14-btrfs-fix-kvcalloc-args-order.patch
new file mode 100644
index 00000000..0ed049e2
--- /dev/null
+++ b/2930_gcc14-btrfs-fix-kvcalloc-args-order.patch
@@ -0,0 +1,37 @@
+Subject: [gcc-14 PATCH] btrfs: fix kvcalloc() arguments order
+
+When compiling with gcc version 14.0.0 20231220 (experimental)
+and W=1, I've noticed the following warning:
+
+fs/btrfs/send.c: In function 'btrfs_ioctl_send':
+fs/btrfs/send.c:8208:44: warning: 'kvcalloc' sizes specified with 'sizeof'
+in the earlier argument and not in the later argument 
[-Wcalloc-transposed-args]
+ 8208 |         sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots),
+      |                                            ^
+
+Since 'n' and 'size' arguments of 'kvcalloc()' are multiplied to
+calculate the final size, their actual order doesn't affect the
+result and so this is not a bug. But it's still worth to fix it.
+
+Link: 
https://lore.kernel.org/linux-btrfs/[email protected]/T/#u
+---
+ fs/btrfs/send.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
+index 4e36550618e5..2d7519a6ce72 100644
+--- a/fs/btrfs/send.c
++++ b/fs/btrfs/send.c
+@@ -8205,8 +8205,8 @@ long btrfs_ioctl_send(struct inode *inode, struct 
btrfs_ioctl_send_args *arg)
+               goto out;
+       }
+ 
+-      sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots),
+-                                   arg->clone_sources_count + 1,
++      sctx->clone_roots = kvcalloc(arg->clone_sources_count + 1,
++                                   sizeof(*sctx->clone_roots),
+                                    GFP_KERNEL);
+       if (!sctx->clone_roots) {
+               ret = -ENOMEM;
+-- 
+2.43.0

diff --git a/2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch 
b/2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch
new file mode 100644
index 00000000..b6f6ab38
--- /dev/null
+++ b/2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch
@@ -0,0 +1,37 @@
+Subject: [gcc-14 PATCH] drm: i915: Adapt to -Walloc-size
+
+GCC 14 introduces a new -Walloc-size included in -Wextra which errors out
+like:
+```
+drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c: In function 
‘eb_copy_relocations’:
+drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c:1681:24: error: allocation of 
insufficient size ‘1’ for type ‘struct drm_i915_gem_relocation_entry’ with size 
‘32’ [-Werror=alloc-size]
+ 1681 |                 relocs = kvmalloc_array(size, 1, GFP_KERNEL);
+      |                        ^
+
+```
+
+So, just swap the number of members and size arguments to match the prototype, 
as
+we're initialising 1 element of size `size`. GCC then sees we're not
+doing anything wrong.
+
+Link: 
https://lore.kernel.org/intel-gfx/[email protected]/
+Signed-off-by: Sam James <[email protected]>
+---
+ drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+index 683fd8d3151c..45b9d9e34b8b 100644
+--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
++++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+@@ -1678,7 +1678,7 @@ static int eb_copy_relocations(const struct 
i915_execbuffer *eb)
+               urelocs = u64_to_user_ptr(eb->exec[i].relocs_ptr);
+               size = nreloc * sizeof(*relocs);
+ 
+-              relocs = kvmalloc_array(size, 1, GFP_KERNEL);
++              relocs = kvmalloc_array(1, size, GFP_KERNEL);
+               if (!relocs) {
+                       err = -ENOMEM;
+                       goto err;
+-- 
+2.42.1

diff --git a/2932_gcc14-objtool-Fix-calloc-call-for-new-Walloc-size.patch 
b/2932_gcc14-objtool-Fix-calloc-call-for-new-Walloc-size.patch
new file mode 100644
index 00000000..dca9494a
--- /dev/null
+++ b/2932_gcc14-objtool-Fix-calloc-call-for-new-Walloc-size.patch
@@ -0,0 +1,41 @@
+Subject: [gcc-14 PATCH] objtool: Fix calloc call for new -Walloc-size
+
+GCC 14 introduces a new -Walloc-size included in -Wextra which errors out
+like:
+```
+check.c: In function ‘cfi_alloc’:
+check.c:294:33: error: allocation of insufficient size ‘1’ for type ‘struct 
cfi_state’ with size ‘320’ [-Werror=alloc-size]
+  294 |         struct cfi_state *cfi = calloc(sizeof(struct cfi_state), 1);
+      |                                 ^~~~~~
+```
+
+The calloc prototype is:
+```
+void *calloc(size_t nmemb, size_t size);
+```
+
+So, just swap the number of members and size arguments to match the prototype, 
as
+we're initialising 1 struct of size `sizeof(struct ...)`. GCC then sees we're 
not
+doing anything wrong.
+
+Link: https://lore.kernel.org/all/[email protected]/
+Signed-off-by: Sam James <[email protected]>
+---
+ tools/objtool/check.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/objtool/check.c b/tools/objtool/check.c
+index e94756e09ca9..548ec3cd7c00 100644
+--- a/tools/objtool/check.c
++++ b/tools/objtool/check.c
+@@ -291,7 +291,7 @@ static void init_insn_state(struct objtool_file *file, 
struct insn_state *state,
+ 
+ static struct cfi_state *cfi_alloc(void)
+ {
+-      struct cfi_state *cfi = calloc(sizeof(struct cfi_state), 1);
++      struct cfi_state *cfi = calloc(1, sizeof(struct cfi_state));
+       if (!cfi) {
+               WARN("calloc failed");
+               exit(1);
+-- 
+2.42.1

Reply via email to