[compiler-rt] 8584991 - [compiler-rt][rtsan] Reland "fopencookie support." (#120864) (#121547)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 3 03:16:37 PST 2025
Author: David CARLIER
Date: 2025-01-03T11:16:34Z
New Revision: 85849917f7ba19f6906f64726dc5e7101f8984ce
URL: https://github.com/llvm/llvm-project/commit/85849917f7ba19f6906f64726dc5e7101f8984ce
DIFF: https://github.com/llvm/llvm-project/commit/85849917f7ba19f6906f64726dc5e7101f8984ce.diff
LOG: [compiler-rt][rtsan] Reland "fopencookie support." (#120864) (#121547)
Added:
Modified:
compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
index 4e51f464b57304..9f89ab6bf1fc7d 100644
--- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
@@ -297,6 +297,17 @@ INTERCEPTOR(FILE *, fdopen, int fd, const char *mode) {
return REAL(fdopen)(fd, mode);
}
+#if SANITIZER_INTERCEPT_FOPENCOOKIE
+INTERCEPTOR(FILE *, fopencookie, void *cookie, const char *mode,
+ cookie_io_functions_t funcs) {
+ __rtsan_notify_intercepted_call("fopencookie");
+ return REAL(fopencookie)(cookie, mode, funcs);
+}
+#define RTSAN_MAYBE_INTERCEPT_FOPENCOOKIE INTERCEPT_FUNCTION(fopencookie)
+#else
+#define RTSAN_MAYBE_INTERCEPT_FOPENCOOKIE
+#endif
+
#if SANITIZER_INTERCEPT_OPEN_MEMSTREAM
INTERCEPTOR(FILE *, open_memstream, char **buf, size_t *size) {
__rtsan_notify_intercepted_call("open_memstream");
@@ -972,6 +983,7 @@ void __rtsan::InitializeInterceptors() {
INTERCEPT_FUNCTION(fputs);
INTERCEPT_FUNCTION(fdopen);
INTERCEPT_FUNCTION(freopen);
+ RTSAN_MAYBE_INTERCEPT_FOPENCOOKIE;
RTSAN_MAYBE_INTERCEPT_OPEN_MEMSTREAM;
RTSAN_MAYBE_INTERCEPT_FMEMOPEN;
INTERCEPT_FUNCTION(lseek);
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 b052dd859dcdf6..5adbf0fb63de80 100644
--- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
@@ -353,6 +353,31 @@ TEST_F(RtsanFileTest, FopenDiesWhenRealtime) {
ExpectNonRealtimeSurvival(Func);
}
+#if SANITIZER_INTERCEPT_FOPENCOOKIE
+TEST_F(RtsanFileTest, FopenCookieDieWhenRealtime) {
+ FILE *f = fopen(GetTemporaryFilePath(), "w");
+ EXPECT_THAT(f, Ne(nullptr));
+ struct fholder {
+ FILE *fp;
+ size_t read;
+ } fh = {f, 0};
+ auto CookieRead = [this](void *cookie, char *buf, size_t size) {
+ fholder *p = reinterpret_cast<fholder *>(cookie);
+ p->read = fread(static_cast<void *>(buf), 1, size, p->fp);
+ EXPECT_NE(0, p->read);
+ };
+ cookie_io_functions_t funcs = {(cookie_read_function_t *)&CookieRead, nullptr,
+ nullptr, nullptr};
+ auto Func = [&fh, &funcs]() {
+ FILE *f = fopencookie(&fh, "w", funcs);
+ EXPECT_THAT(f, Ne(nullptr));
+ };
+
+ ExpectRealtimeDeath(Func, "fopencookie");
+ ExpectNonRealtimeSurvival(Func);
+}
+#endif
+
#if SANITIZER_INTERCEPT_OPEN_MEMSTREAM
TEST_F(RtsanFileTest, OpenMemstreamDiesWhenRealtime) {
char *buffer;
More information about the llvm-commits
mailing list