From d9757dcf974045310b8d106112cf86f826b151f9 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Mon, 30 Sep 2024 14:03:10 -0700 Subject: [PATCH] Bugfix: Fix for handle AT_FDCWD for readlinkat (#209) * check for fd < 0 * fixed readlinkat to handle AT_FDCWD --- src/dftracer/brahma/posix.cpp | 20 +++++++++++++++----- src/dftracer/brahma/posix.h | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/dftracer/brahma/posix.cpp b/src/dftracer/brahma/posix.cpp index 587ff3e..18f4b01 100644 --- a/src/dftracer/brahma/posix.cpp +++ b/src/dftracer/brahma/posix.cpp @@ -382,11 +382,21 @@ ssize_t brahma::POSIXDFTracer::readlink(const char *path, char *buf, ssize_t brahma::POSIXDFTracer::readlinkat(int fd, const char *path, char *buf, size_t bufsize) { BRAHMA_MAP_OR_FAIL(readlinkat); - DFT_LOGGER_START(fd); - DFT_LOGGER_UPDATE(fd); - DFT_LOGGER_UPDATE(bufsize); - ssize_t ret = __real_readlinkat(fd, path, buf, bufsize); - DFT_LOGGER_END(); + ssize_t ret; + if (fd != AT_FDCWD) { + DFT_LOGGER_START(fd); + DFT_LOGGER_UPDATE(fd); + DFT_LOGGER_UPDATE(path); + DFT_LOGGER_UPDATE(bufsize); + ret = __real_readlinkat(fd, path, buf, bufsize); + DFT_LOGGER_END(); + } else { + DFT_LOGGER_START(path); + DFT_LOGGER_UPDATE(fd); + DFT_LOGGER_UPDATE(bufsize); + ret = __real_readlinkat(fd, path, buf, bufsize); + DFT_LOGGER_END(); + } return ret; } diff --git a/src/dftracer/brahma/posix.h b/src/dftracer/brahma/posix.h index 01ce95f..df6a869 100644 --- a/src/dftracer/brahma/posix.h +++ b/src/dftracer/brahma/posix.h @@ -30,7 +30,7 @@ class POSIXDFTracer : public POSIX { bool trace_all_files; inline uint16_t is_traced(int fd, const char *func) { - if (fd == -1) return 0; + if (fd < 0) return 0; uint16_t trace = tracked_fd[fd % MAX_FD]; if (trace != 0) { DFTRACER_LOG_DEBUG(