[compiler-rt] [compiler-rt] openat2 syscall interception. (PR #153846)
David CARLIER via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 15 10:48:01 PDT 2025
https://github.com/devnexen created https://github.com/llvm/llvm-project/pull/153846
None
>From bac64e0f3e6a3bb38cae5fb8a35e4e4ac6fda3dd Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen at gmail.com>
Date: Fri, 15 Aug 2025 18:47:22 +0100
Subject: [PATCH] [compiler-rt] openat2 syscall interception.
---
.../sanitizer_common_syscalls.inc | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc
index 521fc116f2888..5813a86054462 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc
@@ -143,6 +143,12 @@ struct sanitizer_kernel_sockaddr {
char sa_data[14];
};
+struct sanitizer_kernel_how_to {
+ u64 flags;
+ u64 mode;
+ u64 resolve;
+};
+
// Real sigset size is always passed as a syscall argument.
// Declare it "void" to catch sizeof(kernel_sigset_t).
typedef void kernel_sigset_t;
@@ -2843,6 +2849,17 @@ PRE_SYSCALL(openat)(long dfd, const void *filename, long flags, long mode) {
POST_SYSCALL(openat)
(long res, long dfd, const void *filename, long flags, long mode) {}
+PRE_SYSCALL(openat2)(long dfd, const void *filename, const sanitizer_kernel_how_to *how, uptr howlen) {
+ if (filename)
+ PRE_READ(filename,
+ __sanitizer::internal_strlen((const char *)filename) + 1);
+
+ if (how)
+ PRE_READ(how, howlen);
+}
+
+POST_SYSCALL(openat2)(long res, long dfd, const void *filename, const sanitizer_kernel_how_to *how, uptr howlen) {}
+
PRE_SYSCALL(newfstatat)
(long dfd, const void *filename, void *statbuf, long flag) {
if (filename)
More information about the llvm-commits
mailing list