Skip to content

Commit

Permalink
feat: use close_range on linux to close fds
Browse files Browse the repository at this point in the history
  • Loading branch information
zu1k committed Jun 14, 2023
1 parent 024e540 commit ba3ac3c
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 1 deletion.
4 changes: 4 additions & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
Expand Up @@ -243,6 +243,10 @@ uptr internal_close(fd_t fd) {
return internal_syscall(SYSCALL(close), fd);
}

uptr internal_close_range(fd_t fd, fd_t max_fd, int flags) {
return internal_syscall(SYSCALL(close_range), fd, max_fd, flags);
}

uptr internal_open(const char *filename, int flags) {
# if SANITIZER_LINUX
return internal_syscall(SYSCALL(openat), AT_FDCWD, (uptr)filename, flags);
Expand Down
1 change: 1 addition & 0 deletions compiler-rt/lib/sanitizer_common/sanitizer_posix.h
Expand Up @@ -29,6 +29,7 @@ namespace __sanitizer {
uptr internal_open(const char *filename, int flags);
uptr internal_open(const char *filename, int flags, u32 mode);
uptr internal_close(fd_t fd);
uptr internal_close_range(fd_t fd, fd_t max_fd, int flags);

uptr internal_read(fd_t fd, void *buf, uptr count);
uptr internal_write(fd_t fd, const void *buf, uptr count);
Expand Down
3 changes: 2 additions & 1 deletion compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp
Expand Up @@ -462,7 +462,8 @@ pid_t StartSubprocess(const char *program, const char *const argv[],
internal_close(stderr_fd);
}

for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--) internal_close(fd);
// for (int fd = sysconf(_SC_OPEN_MAX); fd > 2; fd--) internal_close(fd);
internal_close_range(3, ~0U, CLOSE_RANGE_UNSHARE);

internal_execve(program, const_cast<char **>(&argv[0]),
const_cast<char *const *>(envp));
Expand Down

0 comments on commit ba3ac3c

Please sign in to comment.