diff options
author | Mike Pagano <mpagano@gentoo.org> | 2024-01-25 08:48:59 -0500 |
---|---|---|
committer | Mike Pagano <mpagano@gentoo.org> | 2024-01-25 08:48:59 -0500 |
commit | 61e9ad963d9ed3cf33c289e866f0cc07eb649478 (patch) | |
tree | beab307fa349a2c3fe9e9e3044e5158b57af51f5 | |
parent | Linux patch 6.6.13 (diff) | |
download | linux-patches-61e9ad963d9ed3cf33c289e866f0cc07eb649478.tar.gz linux-patches-61e9ad963d9ed3cf33c289e866f0cc07eb649478.tar.bz2 linux-patches-61e9ad963d9ed3cf33c289e866f0cc07eb649478.zip |
gcc-14 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@gentoo.org>
-rw-r--r-- | 0000_README | 12 | ||||
-rw-r--r-- | 2930_gcc14-btrfs-fix-kvcalloc-args-order.patch | 37 | ||||
-rw-r--r-- | 2931_gcc14-drm-i915-Adapt-to-Walloc-size.patch | 37 | ||||
-rw-r--r-- | 2932_gcc14-objtool-Fix-calloc-call-for-new-Walloc-size.patch | 41 |
4 files changed, 127 insertions, 0 deletions
diff --git a/0000_README b/0000_README index b98499ab..ab82fe93 100644 --- a/0000_README +++ b/0000_README @@ -123,6 +123,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/20231221084748.10094-1-dmantipov@yandex.ru/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/20231107215538.1891359-1-sam@gentoo.org/ +Signed-off-by: Sam James <sam@gentoo.org> +--- + 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/20231107205504.1470006-1-sam@gentoo.org/ +Signed-off-by: Sam James <sam@gentoo.org> +--- + 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 |