[compiler-rt] [compiler-rt] openat2 syscall interception. (PR #153846)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 15 10:48:39 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: David CARLIER (devnexen)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/153846.diff
1 Files Affected:
- (modified) compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc (+17)
``````````diff
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)
``````````
</details>
https://github.com/llvm/llvm-project/pull/153846
More information about the llvm-commits
mailing list