Revert "fdsan: make fatal by default."
This reverts commit 66b5e3ca1941a118bbb8ea41bfe98f9725ee8d5d.
Reason for revert: Causes installd_dexopt_test to fail. Presumably there is an existing issue which this change is turning into a hard fail, so that needs to be fixed before this can be rolled forwards. See b/139092341.
Bug: 139092341
Bug: 137788030
Change-Id: I1beccddff64c86541bc003b9b009f4046ec9cbf1
diff --git a/libc/bionic/fdsan.cpp b/libc/bionic/fdsan.cpp
index 4ebc796..dd3a96e 100644
--- a/libc/bionic/fdsan.cpp
+++ b/libc/bionic/fdsan.cpp
@@ -106,8 +106,30 @@
}
void __libc_init_fdsan() {
- constexpr auto default_level = ANDROID_FDSAN_ERROR_LEVEL_FATAL;
- android_fdsan_set_error_level_from_property(default_level);
+ constexpr auto default_level = ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE;
+ const prop_info* pi = __system_property_find(kFdsanPropertyName);
+ if (!pi) {
+ android_fdsan_set_error_level(default_level);
+ return;
+ }
+ __system_property_read_callback(
+ pi,
+ [](void*, const char*, const char* value, uint32_t) {
+ if (strcasecmp(value, "1") == 0 || strcasecmp(value, "fatal") == 0) {
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
+ } else if (strcasecmp(value, "warn") == 0) {
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS);
+ } else if (strcasecmp(value, "warn_once") == 0) {
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
+ } else {
+ if (strlen(value) != 0 && strcasecmp(value, "0") != 0) {
+ async_safe_format_log(ANDROID_LOG_ERROR, "libc",
+ "debug.fdsan set to unknown value '%s', disabling", value);
+ }
+ android_fdsan_set_error_level(default_level);
+ }
+ },
+ nullptr);
}
static FdTable& GetFdTable() {
@@ -333,45 +355,6 @@
return atomic_exchange(&GetFdTable().error_level, new_level);
}
-android_fdsan_error_level android_fdsan_set_error_level_from_property(
- android_fdsan_error_level default_level) {
- const prop_info* pi = __system_property_find(kFdsanPropertyName);
- if (!pi) {
- return android_fdsan_set_error_level(default_level);
- }
-
- struct callback_data {
- android_fdsan_error_level default_value;
- android_fdsan_error_level result;
- };
-
- callback_data data;
- data.default_value = default_level;
-
- __system_property_read_callback(
- pi,
- [](void* arg, const char*, const char* value, uint32_t) {
- callback_data* data = static_cast<callback_data*>(arg);
-
- if (strcasecmp(value, "1") == 0 || strcasecmp(value, "fatal") == 0) {
- data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
- } else if (strcasecmp(value, "warn") == 0) {
- data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS);
- } else if (strcasecmp(value, "warn_once") == 0) {
- data->result = android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
- } else {
- if (strlen(value) != 0 && strcasecmp(value, "0") != 0) {
- async_safe_format_log(ANDROID_LOG_ERROR, "libc",
- "debug.fdsan set to unknown value '%s', disabling", value);
- }
- data->result = android_fdsan_set_error_level(data->default_value);
- }
- },
- &data);
-
- return data.result;
-}
-
int close(int fd) {
int rc = android_fdsan_close_with_tag(fd, 0);
if (rc == -1 && errno == EINTR) {
diff --git a/libc/include/android/fdsan.h b/libc/include/android/fdsan.h
index 83b9318..1169ed0 100644
--- a/libc/include/android/fdsan.h
+++ b/libc/include/android/fdsan.h
@@ -197,8 +197,4 @@
*/
enum android_fdsan_error_level android_fdsan_set_error_level(enum android_fdsan_error_level new_level) __INTRODUCED_IN(29) __attribute__((__weak__));
-/*
- * Set the error level to the global setting if available, or a default value.
- */
-enum android_fdsan_error_level android_fdsan_set_error_level_from_property(enum android_fdsan_error_level default_level) __INTRODUCED_IN(30) __attribute__((__weak__));
__END_DECLS
diff --git a/linker/linker_sdk_versions.cpp b/linker/linker_sdk_versions.cpp
index 29c0f4a..b06f3e6 100644
--- a/linker/linker_sdk_versions.cpp
+++ b/linker/linker_sdk_versions.cpp
@@ -26,12 +26,9 @@
* SUCH DAMAGE.
*/
-#include <atomic>
-
-#include <android/api-level.h>
-#include <android/fdsan.h>
-
#include "linker.h"
+#include <android/api-level.h>
+#include <atomic>
static std::atomic<int> g_target_sdk_version(__ANDROID_API__);
@@ -41,10 +38,6 @@
target = __ANDROID_API__;
}
g_target_sdk_version = target;
-
- if (target < 30) {
- android_fdsan_set_error_level_from_property(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
- }
}
int get_application_target_sdk_version() {