stress-ng/core-shim-limit-_FORTIFY_SOURCE-to-2-for-ALT-linux-g.patch
John Kacur dca8979b00 Remove the revert patch and replace it with an upstream fix for power
Remove the revert patch and replace it with an upstream fix for power
Include all of the stress-ng patches available past 0.18.06

Resolves:RHEL-65475
Signed-off-by: John Kacur <jkacur@redhat.com>
2024-11-06 09:29:06 -05:00

105 lines
2.6 KiB
Diff

From 4e832afb77a158a6bb59f7adac6d9db5ecd5a4b8 Mon Sep 17 00:00:00 2001
From: Colin Ian King <colin.i.king@gmail.com>
Date: Tue, 5 Nov 2024 14:40:21 +0000
Subject: [PATCH 6/8] core-shim: limit _FORTIFY_SOURCE to 2 for ALT linux gcc
for ppoll workaround
Fixes: https://github.com/ColinIanKing/stress-ng/issues/452
Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
---
Makefile | 8 ++++++++
core-shim.c | 40 ++++++++++++++++++++++------------------
2 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/Makefile b/Makefile
index 2661376a258a..cb395115cd64 100644
--- a/Makefile
+++ b/Makefile
@@ -52,6 +52,14 @@ ifneq ($(shell $(CC) -v 2>&1 | grep scan-build),)
COMPILER = scan-build
endif
+#
+# check for ALT linux gcc, define HAVE_ALT_LINUX_GCC, see core-shim.c
+# https://github.com/ColinIanKing/stress-ng/issues/452
+#
+ifneq ($(shell $(CC) -v 2>&1 | grep Target | grep "alt-linux"),)
+override CFLAGS += -DHAVE_ALT_LINUX_GCC
+endif
+
KERNEL=$(shell uname -s)
NODENAME=$(shell uname -n)
diff --git a/core-shim.c b/core-shim.c
index a7813474ab86..2f4b88f8188c 100644
--- a/core-shim.c
+++ b/core-shim.c
@@ -19,6 +19,17 @@
*/
#define STRESS_CORE_SHIM
+/*
+ * For ALT Linux gcc use at most _FORTIFY_SOURCE level 2
+ * https://github.com/ColinIanKing/stress-ng/issues/452
+ */
+#if defined(HAVE_ALT_LINUX_GCC) && \
+ defined(_FORTIFY_SOURCE) && \
+ _FORTIFY_SOURCE > 2
+#undef _FORTIFY_SOURCE
+#define _FORTIFY_SOURCE 2
+#endif
+
#include "stress-ng.h"
#include "core-arch.h"
#include "core-attribute.h"
@@ -2825,7 +2836,6 @@ int shim_mseal(void *addr, size_t len, unsigned long flags)
#endif
}
-
/*
* shim_ppoll()
* shim wrapper for ppoll
@@ -2836,26 +2846,20 @@ int shim_ppoll(
const struct timespec *tmo_p,
const sigset_t *sigmask)
{
-
#if defined(HAVE_PPOLL)
-
-#if defined(_FORTIFY_SOURCE)
-#undef STRESS__FORTIFY_SOURCE
-#define STRESS__FORTIFY_SOURCE _FORTIFY_SOURCE
-#undef _FORTIFY_SOURCE
-#define _FORTIFY_SOURCE 2
-#endif
-
return ppoll(fds, nfds, tmo_p, sigmask);
+#elif defined(__NR_ppoll) && defined(_NSIG)
+ struct timespec tval;
-#if defined(STRESS__FORTIFY_SOURCE)
-#undef _FORTIFY_SOURCE
-#define _FORTIFY_SOURCE STRESS__FORTIFY_SOURCE
-#undef STRESS__FORTIFY_SOURCE
-#endif
-
-#elif defined(__NR_ppoll)
- return (int)syscall(__NR_ppoll, fds, nfds, tmo_p, sigmask);
+ /*
+ * The kernel will update the timeout, so use a tmp val
+ * instead
+ */
+ if (tmo_p != NULL) {
+ tval = *tmo_p;
+ tmo_p = &tval;
+ }
+ return (int)syscall(__NR_ppoll, fds, nfds, tmo_p, sigmask, _NSIG / 8);
#else
return shim_enosys(0, fds, nfds, tmo_p, sigmask);
#endif
--
2.47.0