diff --git a/src/unix/async.c b/src/unix/async.c index 91baec6cd2387ac81ea3dcf1e6458c2bd91ad725..428536ae892aac562436d79aadfb505d01d2233e 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 749219eae8eb094a1609d6b2e005d0d49ecd0d54..c90660912ee4d85807c5396a3f2fff2be75e955e 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 97659ec2a7e71c9d0226da73b11bbe259e9a6150..a44019b0065c3478441489dca70bdbc55c1711b5 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 b5ef6a811d89aeedb5fdb1ed0879ed573bcd3487..a0a63631affb9869a9074b5db8a4ba764a1b9c87 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 3ed177b0abbc401b391caa38b3f62afd4b2c48e3..8077a4ad7822c414850998ef8d5a8d2aa821ce39 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_ */