Merge changes I0a7e342d,Id9baa54a,Ib6f75a7c
* changes:
fdtrack: print fdsan owner tag.
fdtrack: make actually async safe.
Move fdtrack APIs to LLNDK.
diff --git a/libc/bionic/fdtrack.cpp b/libc/bionic/fdtrack.cpp
index 38eb219..1123512 100644
--- a/libc/bionic/fdtrack.cpp
+++ b/libc/bionic/fdtrack.cpp
@@ -28,8 +28,7 @@
#include <stdatomic.h>
-#include <android/fdtrack.h>
-
+#include <platform/bionic/fdtrack.h>
#include <platform/bionic/reserved_signals.h>
#include "private/bionic_fdtrack.h"
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index dddd84c..2ca4b21 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -1484,9 +1484,6 @@
global:
__mempcpy_chk;
__tls_get_addr; # arm64
- android_fdtrack_compare_exchange_hook;
- android_fdtrack_get_enabled;
- android_fdtrack_set_enabled;
call_once;
cnd_broadcast;
cnd_destroy;
@@ -1755,6 +1752,9 @@
__system_property_set_filename;
__system_property_update;
android_fdsan_get_fd_table;
+ android_fdtrack_compare_exchange_hook; # llndk
+ android_fdtrack_get_enabled; # llndk
+ android_fdtrack_set_enabled; # llndk
android_net_res_stats_get_info_for_net;
android_net_res_stats_aggregate;
android_net_res_stats_get_usable_servers;
diff --git a/libc/include/android/fdtrack.h b/libc/platform/bionic/fdtrack.h
similarity index 100%
rename from libc/include/android/fdtrack.h
rename to libc/platform/bionic/fdtrack.h
diff --git a/libc/private/bionic_fdtrack.h b/libc/private/bionic_fdtrack.h
index ddf7249..174ba1d 100644
--- a/libc/private/bionic_fdtrack.h
+++ b/libc/private/bionic_fdtrack.h
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#include <stdatomic.h>
-#include <android/fdtrack.h>
+#include "platform/bionic/fdtrack.h"
#include "bionic/pthread_internal.h"
#include "private/bionic_tls.h"
diff --git a/libfdtrack/fdtrack.cpp b/libfdtrack/fdtrack.cpp
index 7c4cfbf..831a50d 100644
--- a/libfdtrack/fdtrack.cpp
+++ b/libfdtrack/fdtrack.cpp
@@ -32,7 +32,8 @@
#include <mutex>
#include <vector>
-#include <android/fdtrack.h>
+#include <android/fdsan.h>
+#include <bionic/fdtrack.h>
#include <android-base/no_destructor.h>
#include <android-base/thread_annotations.h>
@@ -110,18 +111,32 @@
continue;
}
- std::lock_guard<std::mutex> lock(entry->mutex);
+ if (!entry->mutex.try_lock()) {
+ async_safe_format_log(ANDROID_LOG_WARN, "fdtrack", "fd %d locked, skipping", fd);
+ continue;
+ }
+
if (entry->backtrace.empty()) {
continue;
}
- async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d:", fd);
+ uint64_t fdsan_owner = android_fdsan_get_owner_tag(fd);
+
+ if (fdsan_owner != 0) {
+ async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d: (owner = %#" PRIx64 ")", fd,
+ fdsan_owner);
+ } else {
+ async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", "fd %d: (unowned)", fd);
+ }
+
const size_t frame_skip = 2;
for (size_t i = frame_skip; i < entry->backtrace.size(); ++i) {
auto& frame = entry->backtrace[i];
async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", " %zu: %s+%" PRIu64, i - frame_skip,
frame.function_name.c_str(), frame.function_offset);
}
+
+ entry->mutex.unlock();
}
android_fdtrack_set_enabled(prev);
}
diff --git a/tests/fdtrack_test.cpp b/tests/fdtrack_test.cpp
index a616e6f..fca92ce 100644
--- a/tests/fdtrack_test.cpp
+++ b/tests/fdtrack_test.cpp
@@ -25,7 +25,7 @@
#include <unistd.h>
#if defined(__BIONIC__)
-#include <android/fdtrack.h>
+#include "platform/bionic/fdtrack.h"
#endif
#include <vector>