[compiler-rt] [compiler-rt][rtsan] sched cpu affinity for linux interception. (PR #124194)
David CARLIER via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 23 13:13:06 PST 2025
https://github.com/devnexen created https://github.com/llvm/llvm-project/pull/124194
None
>From 49580de854ca954615b5992a19457fd15fdeeb76 Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen at gmail.com>
Date: Thu, 23 Jan 2025 21:11:38 +0000
Subject: [PATCH] [compiler-rt][rtsan] sched cpu affinity for linux
interception.
---
.../lib/rtsan/rtsan_interceptors_posix.cpp | 22 +++++++++++++++++++
.../tests/rtsan_test_interceptors_posix.cpp | 16 ++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
index a01354781272d5..705c5412184bac 100644
--- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
@@ -693,6 +693,26 @@ INTERCEPTOR(int, sched_yield, void) {
return REAL(sched_yield)();
}
+#if SANITIZER_LINUX
+INTERCEPTOR(int, sched_getaffinity, pid_t pid, size_t len, cpu_set_t *set) {
+ __rtsan_notify_intercepted_call("sched_getaffinity");
+ return REAL(sched_getaffinity)(pid, len, set);
+}
+
+INTERCEPTOR(int, sched_setaffinity, pid_t pid, size_t len,
+ const cpu_set_t *set) {
+ __rtsan_notify_intercepted_call("sched_setaffinity");
+ return REAL(sched_setaffinity)(pid, len, set);
+}
+#define RTSAN_MAYBE_INTERCEPT_SCHED_GETAFFINITY \
+ INTERCEPT_FUNCTION(sched_getaffinity)
+#define RTSAN_MAYBE_INTERCEPT_SCHED_SETAFFINITY \
+ INTERCEPT_FUNCTION(sched_setaffinity)
+#else
+#define RTSAN_MAYBE_INTERCEPT_SCHED_GETAFFINITY
+#define RTSAN_MAYBE_INTERCEPT_SCHED_SETAFFINITY
+#endif
+
// Memory
INTERCEPTOR(void *, calloc, SIZE_T num, SIZE_T size) {
@@ -1331,6 +1351,8 @@ void __rtsan::InitializeInterceptors() {
INTERCEPT_FUNCTION(usleep);
INTERCEPT_FUNCTION(nanosleep);
INTERCEPT_FUNCTION(sched_yield);
+ RTSAN_MAYBE_INTERCEPT_SCHED_GETAFFINITY;
+ RTSAN_MAYBE_INTERCEPT_SCHED_SETAFFINITY;
INTERCEPT_FUNCTION(accept);
INTERCEPT_FUNCTION(bind);
diff --git a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
index 981766c85f965e..b0ccaf784f02b6 100644
--- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
@@ -320,6 +320,22 @@ TEST(TestRtsanInterceptors, SchedYieldDiesWhenRealtime) {
ExpectNonRealtimeSurvival(Func);
}
+#if SANITIZER_LINUX
+TEST(TestRtsanInterceptors, SchedGetaffinityDiesWhenRealtime) {
+ cpu_set_t set{};
+ auto Func = [&set]() { sched_getaffinity(0, sizeof(set), &set); };
+ ExpectRealtimeDeath(Func, "sched_getaffinity");
+ ExpectNonRealtimeSurvival(Func);
+}
+
+TEST(TestRtsanInterceptors, SchedSetaffinityDiesWhenRealtime) {
+ cpu_set_t set{};
+ auto Func = [&set]() { sched_setaffinity(0, sizeof(set), &set); };
+ ExpectRealtimeDeath(Func, "sched_setaffinity");
+ ExpectNonRealtimeSurvival(Func);
+}
+#endif
+
/*
Filesystem
*/
More information about the llvm-commits
mailing list