From 4698e7868b34f6d0676842340659fb3a5f58d532 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 8 Nov 2020 16:02:15 -0800 Subject: puzzles: Check for excessive constant arguments Fixes an issue found with LTO builds Signed-off-by: Khem Raj Signed-off-by: Richard Purdie --- ...lloc-Check-for-excessive-values-to-malloc.patch | 49 ++++++++++++++++++++++ meta/recipes-sato/puzzles/puzzles_git.bb | 1 + 2 files changed, 50 insertions(+) create mode 100644 meta/recipes-sato/puzzles/files/0001-malloc-Check-for-excessive-values-to-malloc.patch diff --git a/meta/recipes-sato/puzzles/files/0001-malloc-Check-for-excessive-values-to-malloc.patch b/meta/recipes-sato/puzzles/files/0001-malloc-Check-for-excessive-values-to-malloc.patch new file mode 100644 index 0000000000..66af6afa2f --- /dev/null +++ b/meta/recipes-sato/puzzles/files/0001-malloc-Check-for-excessive-values-to-malloc.patch @@ -0,0 +1,49 @@ +From 1c01a5bc9ac7f8aaa484b1a8e0e74aa5f8899d0e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 8 Nov 2020 11:17:59 -0800 +Subject: [PATCH] malloc: Check for excessive values to malloc + +with whole program optimizers like lto smalloc() +is inlined the excessive constant argument is propagated to +malloc() and ultimately triggers the warning. + +malloc.c:15:9: error: argument 1 range [18446744065119617024, 18446744073709551580] exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=] + +therefore add a check before excessive constant argument before calling +malloc + +Note that this will not happen with normal compile since they happen to +be in different translation units and compiler can not semantically +analyze as much + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + malloc.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/malloc.c b/malloc.c +index a7fa7c5..520377c 100644 +--- a/malloc.c ++++ b/malloc.c +@@ -2,6 +2,7 @@ + * malloc.c: safe wrappers around malloc, realloc, free, strdup + */ + ++#include + #include + #include + #include "puzzles.h" +@@ -12,6 +13,8 @@ + */ + void *smalloc(size_t size) { + void *p; ++ if (size > PTRDIFF_MAX) ++ fatal("exceeds maximum object size"); + p = malloc(size); + if (!p) + fatal("out of memory"); +-- +2.29.2 + diff --git a/meta/recipes-sato/puzzles/puzzles_git.bb b/meta/recipes-sato/puzzles/puzzles_git.bb index a0f3b5d9cd..8e4d5b3349 100644 --- a/meta/recipes-sato/puzzles/puzzles_git.bb +++ b/meta/recipes-sato/puzzles/puzzles_git.bb @@ -14,6 +14,7 @@ SRC_URI = "git://git.tartarus.org/simon/puzzles.git \ file://0001-Use-Wno-error-format-overflow-if-the-compiler-suppor.patch \ file://0001-pattern.c-Change-string-lenght-parameter-to-be-size_.patch \ file://fix-ki-uninitialized.patch \ + file://0001-malloc-Check-for-excessive-values-to-malloc.patch \ " UPSTREAM_CHECK_COMMITS = "1" -- cgit 1.2.3-korg