diff options
Diffstat (limited to 'meta/recipes-extended')
-rw-r--r-- | meta/recipes-extended/diffutils/diffutils/0001-c-stack-stop-using-SIGSTKSZ.patch | 84 | ||||
-rw-r--r-- | meta/recipes-extended/diffutils/diffutils_3.7.bb | 1 |
2 files changed, 85 insertions, 0 deletions
diff --git a/meta/recipes-extended/diffutils/diffutils/0001-c-stack-stop-using-SIGSTKSZ.patch b/meta/recipes-extended/diffutils/diffutils/0001-c-stack-stop-using-SIGSTKSZ.patch new file mode 100644 index 0000000000..50e627fa30 --- /dev/null +++ b/meta/recipes-extended/diffutils/diffutils/0001-c-stack-stop-using-SIGSTKSZ.patch | |||
@@ -0,0 +1,84 @@ | |||
1 | From 87b3a8f9ceb2cf0a5c8b72e460465fb9ff2d62d9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Khem Raj <raj.khem@gmail.com> | ||
3 | Date: Fri, 30 Apr 2021 17:40:36 -0700 | ||
4 | Subject: [PATCH] c-stack: stop using SIGSTKSZ | ||
5 | |||
6 | This patch is required with glibc 2.34+ | ||
7 | based on gnulib [1] | ||
8 | |||
9 | [1] https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=f9e2b20a12a230efa30f1d479563ae07d276a94b | ||
10 | |||
11 | Upstream-Status: Pending | ||
12 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
13 | --- | ||
14 | lib/c-stack.c | 22 +++++++++++++--------- | ||
15 | 1 file changed, 13 insertions(+), 9 deletions(-) | ||
16 | |||
17 | diff --git a/lib/c-stack.c b/lib/c-stack.c | ||
18 | index 9bbe6fe..e0874c9 100644 | ||
19 | --- a/lib/c-stack.c | ||
20 | +++ b/lib/c-stack.c | ||
21 | @@ -51,13 +51,14 @@ | ||
22 | typedef struct sigaltstack stack_t; | ||
23 | #endif | ||
24 | #ifndef SIGSTKSZ | ||
25 | -# define SIGSTKSZ 16384 | ||
26 | -#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384 | ||
27 | +#define get_sigstksz() (16384) | ||
28 | +#elif HAVE_LIBSIGSEGV | ||
29 | /* libsigsegv 2.6 through 2.8 have a bug where some architectures use | ||
30 | more than the Linux default of an 8k alternate stack when deciding | ||
31 | if a fault was caused by stack overflow. */ | ||
32 | -# undef SIGSTKSZ | ||
33 | -# define SIGSTKSZ 16384 | ||
34 | +#define get_sigstksz() ((SIGSTKSZ) < 16384 ? 16384 : (SIGSTKSZ)) | ||
35 | +#else | ||
36 | +#define get_sigstksz() ((SIGSTKSZ)) | ||
37 | #endif | ||
38 | |||
39 | #include <stdlib.h> | ||
40 | @@ -136,7 +137,8 @@ die (int signo) | ||
41 | /* Storage for the alternate signal stack. */ | ||
42 | static union | ||
43 | { | ||
44 | - char buffer[SIGSTKSZ]; | ||
45 | + /* allocate buffer with size from get_sigstksz() */ | ||
46 | + char *buffer; | ||
47 | |||
48 | /* These other members are for proper alignment. There's no | ||
49 | standard way to guarantee stack alignment, but this seems enough | ||
50 | @@ -208,10 +210,11 @@ c_stack_action (void (*action) (int)) | ||
51 | program_error_message = _("program error"); | ||
52 | stack_overflow_message = _("stack overflow"); | ||
53 | |||
54 | + alternate_signal_stack.buffer = malloc(get_sigstksz()); | ||
55 | /* Always install the overflow handler. */ | ||
56 | if (stackoverflow_install_handler (overflow_handler, | ||
57 | alternate_signal_stack.buffer, | ||
58 | - sizeof alternate_signal_stack.buffer)) | ||
59 | + get_sigstksz())) | ||
60 | { | ||
61 | errno = ENOTSUP; | ||
62 | return -1; | ||
63 | @@ -284,14 +287,15 @@ c_stack_action (void (*action) (int)) | ||
64 | stack_t st; | ||
65 | struct sigaction act; | ||
66 | st.ss_flags = 0; | ||
67 | + alternate_signal_stack.buffer = malloc(get_sigstksz()); | ||
68 | # if SIGALTSTACK_SS_REVERSED | ||
69 | /* Irix mistakenly treats ss_sp as the upper bound, rather than | ||
70 | lower bound, of the alternate stack. */ | ||
71 | - st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *); | ||
72 | - st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *); | ||
73 | + st.ss_sp = alternate_signal_stack.buffer + get_sigstksz() - sizeof (void *); | ||
74 | + st.ss_size = get_sigstksz() - sizeof (void *); | ||
75 | # else | ||
76 | st.ss_sp = alternate_signal_stack.buffer; | ||
77 | - st.ss_size = sizeof alternate_signal_stack.buffer; | ||
78 | + st.ss_size = get_sigstksz(); | ||
79 | # endif | ||
80 | r = sigaltstack (&st, NULL); | ||
81 | if (r != 0) | ||
82 | -- | ||
83 | 2.31.1 | ||
84 | |||
diff --git a/meta/recipes-extended/diffutils/diffutils_3.7.bb b/meta/recipes-extended/diffutils/diffutils_3.7.bb index 8111ae6065..b9a54fea54 100644 --- a/meta/recipes-extended/diffutils/diffutils_3.7.bb +++ b/meta/recipes-extended/diffutils/diffutils_3.7.bb | |||
@@ -6,6 +6,7 @@ require diffutils.inc | |||
6 | SRC_URI = "${GNU_MIRROR}/diffutils/diffutils-${PV}.tar.xz \ | 6 | SRC_URI = "${GNU_MIRROR}/diffutils/diffutils-${PV}.tar.xz \ |
7 | file://run-ptest \ | 7 | file://run-ptest \ |
8 | file://0001-Skip-strip-trailing-cr-test-case.patch \ | 8 | file://0001-Skip-strip-trailing-cr-test-case.patch \ |
9 | file://0001-c-stack-stop-using-SIGSTKSZ.patch \ | ||
9 | " | 10 | " |
10 | 11 | ||
11 | SRC_URI[md5sum] = "4824adc0e95dbbf11dfbdfaad6a1e461" | 12 | SRC_URI[md5sum] = "4824adc0e95dbbf11dfbdfaad6a1e461" |