From 234c2d427f6e37f83ff028eac1dad966d81add68 Mon Sep 17 00:00:00 2001 From: liaoxingxing Date: Tue, 2 Jul 2024 12:00:11 +0800 Subject: [PATCH] =?UTF-8?q?libuv=E5=BC=95=E5=85=A5fdsan=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liaoxingxing --- src/unix/async.c | 7 +++++++ src/unix/epoll.c | 3 +++ src/unix/loop.c | 4 ++++ src/uv-common.c | 11 +++++++++++ src/uv-common.h | 1 + 5 files changed, 26 insertions(+) diff --git a/src/unix/async.c b/src/unix/async.c index 91baec6..428536a 100644 --- a/src/unix/async.c +++ b/src/unix/async.c @@ -193,6 +193,9 @@ static int uv__async_start(uv_loop_t* loop) { pipefd[0] = err; pipefd[1] = -1; +#ifdef USE_OHOS_DFX + fdsan_exchange_owner_tag(pipefd[0], 0, uv__get_addr_tag((void *)&loop->async_io_watcher)); +#endif #else err = uv__make_pipe(pipefd, UV_NONBLOCK_PIPE); if (err < 0) @@ -231,7 +234,11 @@ void uv__async_stop(uv_loop_t* loop) { } uv__io_stop(loop, &loop->async_io_watcher, POLLIN); +#if defined(__linux__) && defined(USE_OHOS_DFX) + fdsan_close_with_tag(loop->async_io_watcher.fd, uv__get_addr_tag((void *)&loop->async_io_watcher)); +#else uv__close(loop->async_io_watcher.fd); +#endif UV_LOGI("close: loop addr is %{public}zu, loop->async_io_watcher.fd is %{public}d", (size_t)loop, loop->async_io_watcher.fd); loop->async_io_watcher.fd = -1; diff --git a/src/unix/epoll.c b/src/unix/epoll.c index 749219e..c906609 100644 --- a/src/unix/epoll.c +++ b/src/unix/epoll.c @@ -64,6 +64,9 @@ int uv__epoll_init(uv_loop_t* loop) { } loop->backend_fd = fd; +#ifdef USE_OHOS_DFX + fdsan_exchange_owner_tag(loop->backend_fd, 0, uv__get_addr_tag((void *)&loop->backend_fd)); +#endif UV_LOGI("loop init: loop add is %{public}zu, backend_fd is %{public}d", (size_t)loop, fd); if (fd == -1) return UV__ERR(errno); diff --git a/src/unix/loop.c b/src/unix/loop.c index 97659ec..a44019b 100644 --- a/src/unix/loop.c +++ b/src/unix/loop.c @@ -184,7 +184,11 @@ void uv__loop_close(uv_loop_t* loop) { } if (loop->backend_fd != -1) { +#ifdef USE_OHOS_DFX + fdsan_close_with_tag(loop->backend_fd, uv__get_addr_tag((void *)&loop->backend_fd)); +#else uv__close(loop->backend_fd); +#endif UV_LOGI("close: loop addr is %{public}zu, loop->backend_fd is %{public}d", (size_t)loop, loop->backend_fd); loop->backend_fd = -1; } diff --git a/src/uv-common.c b/src/uv-common.c index b5ef6a8..a0a6363 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -972,3 +972,14 @@ uint64_t uv_metrics_idle_time(uv_loop_t* loop) { idle_time += uv_hrtime() - entry_time; return idle_time; } + +uint64_t uv__get_addr_tag(void* addr) { + uint64_t tag = 0; + +#ifdef USE_OHOS_DFX + if (addr != NULL) { + tag = fdsan_create_owner_tag(FDSAN_OWNER_TYPE_FILE, (uint64_t)addr); + } +#endif + return tag; +} \ No newline at end of file diff --git a/src/uv-common.h b/src/uv-common.h index 3ed177b..8077a4a 100644 --- a/src/uv-common.h +++ b/src/uv-common.h @@ -379,4 +379,5 @@ struct uv__loop_internal_fields_s { #endif }; +uint64_t uv__get_addr_tag(void* addr); #endif /* UV_COMMON_H_ */ -- Gitee