Merge "Check /sys/kernel/tracing for tracefs"
diff --git a/base/logging.cpp b/base/logging.cpp
index a868706..f42b996 100644
--- a/base/logging.cpp
+++ b/base/logging.cpp
@@ -340,18 +340,18 @@
int lg_id = LogIdTolog_id_t(id);
- char log_message[1024];
+ char log_message_with_file[4068]; // LOGGER_ENTRY_MAX_PAYLOAD, not available in the NDK.
if (priority == ANDROID_LOG_FATAL && file != nullptr) {
- snprintf(log_message, sizeof(log_message), "%s:%u] %s", file, line, message);
- } else {
- snprintf(log_message, sizeof(log_message), "%s", message);
+ snprintf(log_message_with_file, sizeof(log_message_with_file), "%s:%u] %s", file, line,
+ message);
+ message = log_message_with_file;
}
static auto& liblog_functions = GetLibLogFunctions();
if (liblog_functions) {
__android_logger_data logger_data = {sizeof(__android_logger_data), lg_id, priority, tag,
static_cast<const char*>(nullptr), 0};
- liblog_functions->__android_log_logd_logger(&logger_data, log_message);
+ liblog_functions->__android_log_logd_logger(&logger_data, message);
} else {
__android_log_buf_print(lg_id, priority, tag, "%s", message);
}
diff --git a/bootstat/bootstat.cpp b/bootstat/bootstat.cpp
index d08a59f..6409db0 100644
--- a/bootstat/bootstat.cpp
+++ b/bootstat/bootstat.cpp
@@ -312,6 +312,11 @@
{"reboot,unknown[0-9]*", 183},
{"reboot,longkey,.*", 184},
{"reboot,boringssl-self-check-failed", 185},
+ {"reboot,userspace_failed,shutdown_aborted", 186},
+ {"reboot,userspace_failed,watchdog_triggered", 187},
+ {"reboot,userspace_failed,watchdog_fork", 188},
+ {"reboot,userspace_failed,*", 189},
+ {"reboot,mount_userdata_failed", 190},
};
// Converts a string value representing the reason the system booted to an
diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp
index 9180a06..b27126b 100644
--- a/fs_mgr/fs_mgr.cpp
+++ b/fs_mgr/fs_mgr.cpp
@@ -887,7 +887,7 @@
}
static bool should_use_metadata_encryption(const FstabEntry& entry) {
- return !entry.key_dir.empty() &&
+ return !entry.metadata_key_dir.empty() &&
(entry.fs_mgr_flags.file_encryption || entry.fs_mgr_flags.force_fde_or_fbe);
}
@@ -1159,7 +1159,7 @@
static void WrapUserdataIfNeeded(FstabEntry* entry, const std::string& actual_block_device = {}) {
const auto& block_device =
actual_block_device.empty() ? entry->blk_device : actual_block_device;
- if (entry->mount_point != "/data" || !entry->key_dir.empty() ||
+ if (entry->mount_point != "/data" || !entry->metadata_key_dir.empty() ||
android::base::StartsWith(block_device, "/dev/block/dm-")) {
return;
}
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp
index 9697a4c..ad878f2 100644
--- a/fs_mgr/fs_mgr_fstab.cpp
+++ b/fs_mgr/fs_mgr_fstab.cpp
@@ -276,7 +276,7 @@
entry->vbmeta_partition = arg;
} else if (StartsWith(flag, "keydirectory=")) {
// The metadata flag is followed by an = and the directory for the keys.
- entry->key_dir = arg;
+ entry->metadata_key_dir = arg;
} else if (StartsWith(flag, "sysfs_path=")) {
// The path to trigger device gc by idle-maint of vold.
entry->sysfs_path = arg;
@@ -591,8 +591,8 @@
userdata.blk_device = "userdata_gsi";
userdata.fs_mgr_flags.logical = true;
userdata.fs_mgr_flags.formattable = true;
- if (!userdata.key_dir.empty()) {
- userdata.key_dir += "/gsi";
+ if (!userdata.metadata_key_dir.empty()) {
+ userdata.metadata_key_dir += "/gsi";
}
} else {
userdata = BuildDsuUserdataFstabEntry();
diff --git a/fs_mgr/include_fstab/fstab/fstab.h b/fs_mgr/include_fstab/fstab/fstab.h
index 80deaef..a6e6e09 100644
--- a/fs_mgr/include_fstab/fstab/fstab.h
+++ b/fs_mgr/include_fstab/fstab/fstab.h
@@ -37,7 +37,7 @@
unsigned long flags = 0;
std::string fs_options;
std::string key_loc;
- std::string key_dir;
+ std::string metadata_key_dir;
off64_t length = 0;
std::string label;
int partnum = -1;
diff --git a/fs_mgr/libdm/dm_target.cpp b/fs_mgr/libdm/dm_target.cpp
index 65f6e12..ea54029 100644
--- a/fs_mgr/libdm/dm_target.cpp
+++ b/fs_mgr/libdm/dm_target.cpp
@@ -244,8 +244,20 @@
}
std::string DmTargetDefaultKey::GetParameterString() const {
- return cipher_ + " " + key_ + " " + blockdev_ + " " + std::to_string(start_sector_) +
- (set_dun_ ? " 1 set_dun" : "");
+ std::vector<std::string> argv;
+ argv.emplace_back(cipher_);
+ argv.emplace_back(key_);
+ argv.emplace_back(blockdev_);
+ argv.push_back(std::to_string(start_sector_));
+ std::vector<std::string> extra_argv;
+ if (set_dun_) {
+ extra_argv.emplace_back("set_dun");
+ }
+ if (!extra_argv.empty()) {
+ argv.emplace_back(std::to_string(extra_argv.size()));
+ argv.insert(argv.end(), extra_argv.begin(), extra_argv.end());
+ }
+ return android::base::Join(argv, " ");
}
} // namespace dm
diff --git a/fs_mgr/libsnapshot/snapshot_metadata_updater_test.cpp b/fs_mgr/libsnapshot/snapshot_metadata_updater_test.cpp
index 337be4f..5530e59 100644
--- a/fs_mgr/libsnapshot/snapshot_metadata_updater_test.cpp
+++ b/fs_mgr/libsnapshot/snapshot_metadata_updater_test.cpp
@@ -19,6 +19,7 @@
#include <memory>
#include <string>
+#include <android-base/properties.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <liblp/builder.h>
@@ -42,6 +43,10 @@
class SnapshotMetadataUpdaterTest : public ::testing::TestWithParam<uint32_t> {
public:
+ SnapshotMetadataUpdaterTest() {
+ is_virtual_ab_ = android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
+ }
+
void SetUp() override {
target_slot_ = GetParam();
target_suffix_ = SlotSuffixForSlotNumber(target_slot_);
@@ -122,6 +127,7 @@
<< ".";
}
+ bool is_virtual_ab_;
std::unique_ptr<MetadataBuilder> builder_;
uint32_t target_slot_;
std::string target_suffix_;
diff --git a/fs_mgr/libsnapshot/snapshot_test.cpp b/fs_mgr/libsnapshot/snapshot_test.cpp
index 7de37db..634e0b4 100644
--- a/fs_mgr/libsnapshot/snapshot_test.cpp
+++ b/fs_mgr/libsnapshot/snapshot_test.cpp
@@ -78,7 +78,9 @@
class SnapshotTest : public ::testing::Test {
public:
- SnapshotTest() : dm_(DeviceMapper::Instance()) {}
+ SnapshotTest() : dm_(DeviceMapper::Instance()) {
+ is_virtual_ab_ = android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
+ }
// This is exposed for main.
void Cleanup() {
@@ -88,6 +90,8 @@
protected:
void SetUp() override {
+ if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
+
SnapshotTestPropertyFetcher::SetUp();
InitializeState();
CleanupTestArtifacts();
@@ -97,6 +101,8 @@
}
void TearDown() override {
+ if (!is_virtual_ab_) return;
+
lock_ = nullptr;
CleanupTestArtifacts();
@@ -329,6 +335,7 @@
return AssertionSuccess();
}
+ bool is_virtual_ab_;
DeviceMapper& dm_;
std::unique_ptr<SnapshotManager::LockedFile> lock_;
android::fiemap::IImageManager* image_manager_ = nullptr;
@@ -754,6 +761,8 @@
class SnapshotUpdateTest : public SnapshotTest {
public:
void SetUp() override {
+ if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
+
SnapshotTest::SetUp();
Cleanup();
@@ -813,6 +822,8 @@
}
}
void TearDown() override {
+ if (!is_virtual_ab_) return;
+
Cleanup();
SnapshotTest::TearDown();
}
@@ -1625,6 +1636,8 @@
};
TEST_P(FlashAfterUpdateTest, FlashSlotAfterUpdate) {
+ if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
+
// OTA client blindly unmaps all partitions that are possibly mapped.
for (const auto& name : {"sys_b", "vnd_b", "prd_b"}) {
ASSERT_TRUE(sm->UnmapUpdateSnapshot(name));
@@ -1718,13 +1731,17 @@
// Test behavior of ImageManager::Create on low space scenario. These tests assumes image manager
// uses /data as backup device.
class ImageManagerTest : public SnapshotTest, public WithParamInterface<uint64_t> {
- public:
+ protected:
void SetUp() override {
+ if (!is_virtual_ab_) GTEST_SKIP() << "Test for Virtual A/B devices only";
+
SnapshotTest::SetUp();
userdata_ = std::make_unique<LowSpaceUserdata>();
ASSERT_TRUE(userdata_->Init(GetParam()));
}
void TearDown() override {
+ if (!is_virtual_ab_) return;
+
EXPECT_TRUE(!image_manager_->BackingImageExists(kImageName) ||
image_manager_->DeleteBackingImage(kImageName));
}
diff --git a/fs_mgr/tests/fs_mgr_test.cpp b/fs_mgr/tests/fs_mgr_test.cpp
index c5adea6..709be59 100644
--- a/fs_mgr/tests/fs_mgr_test.cpp
+++ b/fs_mgr/tests/fs_mgr_test.cpp
@@ -413,7 +413,7 @@
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
}
EXPECT_EQ("", entry->key_loc);
- EXPECT_EQ("", entry->key_dir);
+ EXPECT_EQ("", entry->metadata_key_dir);
EXPECT_EQ(0, entry->length);
EXPECT_EQ("", entry->label);
EXPECT_EQ(-1, entry->partnum);
@@ -440,7 +440,7 @@
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
}
EXPECT_EQ("", entry->key_loc);
- EXPECT_EQ("", entry->key_dir);
+ EXPECT_EQ("", entry->metadata_key_dir);
EXPECT_EQ(0, entry->length);
EXPECT_EQ("", entry->label);
EXPECT_EQ(-1, entry->partnum);
@@ -892,7 +892,7 @@
FstabEntry::FsMgrFlags flags = {};
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
- EXPECT_EQ("/dir/key", entry->key_dir);
+ EXPECT_EQ("/dir/key", entry->metadata_key_dir);
}
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_SysfsPath) {
diff --git a/init/builtins.cpp b/init/builtins.cpp
index c877590..742e089 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -1123,6 +1123,7 @@
auto reboot_reason = vdc_arg + "_failed";
if (android::sysprop::InitProperties::userspace_reboot_in_progress().value_or(false)) {
should_reboot_into_recovery = false;
+ reboot_reason = "userspace_failed," + vdc_arg;
}
auto reboot = [reboot_reason, should_reboot_into_recovery](const std::string& message) {
@@ -1159,7 +1160,7 @@
}
// TODO(b/135984674): check that fstab contains /data.
if (auto rc = fs_mgr_remount_userdata_into_checkpointing(&fstab); rc < 0) {
- trigger_shutdown("reboot,mount-userdata-failed");
+ trigger_shutdown("reboot,mount_userdata_failed");
}
if (auto result = queue_fs_event(initial_mount_fstab_return_code, true); !result) {
return Error() << "queue_fs_event() failed: " << result.error();
diff --git a/init/reboot.cpp b/init/reboot.cpp
index 8c90714..8b239fe 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -737,7 +737,7 @@
auto guard = android::base::make_scope_guard([] {
// Leave shutdown so that we can handle a full reboot.
LeaveShutdown();
- trigger_shutdown("reboot,abort-userspace-reboot");
+ trigger_shutdown("reboot,userspace_failed,shutdown_aborted");
});
// Triggering userspace-reboot-requested will result in a bunch of setprop
// actions. We should make sure, that all of them are propagated before
@@ -831,7 +831,7 @@
if (!WaitForProperty("sys.boot_completed", "1", timeout)) {
LOG(ERROR) << "Failed to boot in " << timeout.count() << "ms. Switching to full reboot";
// In this case device is in a boot loop. Only way to recover is to do dirty reboot.
- RebootSystem(ANDROID_RB_RESTART2, "userspace-reboot-watchdog-triggered");
+ RebootSystem(ANDROID_RB_RESTART2, "userspace_failed,watchdog_triggered");
}
LOG(INFO) << "Device booted, stopping userspace reboot watchdog";
}
@@ -847,7 +847,7 @@
if (pid < 0) {
PLOG(ERROR) << "Failed to fork process for userspace reboot watchdog. Switching to full "
<< "reboot";
- trigger_shutdown("reboot,userspace-reboot-failed-to-fork");
+ trigger_shutdown("reboot,userspace_failed,watchdog_fork");
return;
}
if (pid == 0) {
diff --git a/liblog/include/log/log_main.h b/liblog/include/log/log_main.h
index 64791c2..1bd1c8a 100644
--- a/liblog/include/log/log_main.h
+++ b/liblog/include/log/log_main.h
@@ -56,7 +56,7 @@
/*
* Use __VA_ARGS__ if running a static analyzer,
* to avoid warnings of unused variables in __VA_ARGS__.
- * Use contexpr function in C++ mode, so these macros can be used
+ * Use constexpr function in C++ mode, so these macros can be used
* in other constexpr functions without warning.
*/
#ifdef __clang_analyzer__
@@ -131,10 +131,10 @@
* is -inverted- from the normal assert() semantics.
*/
#ifndef LOG_ALWAYS_FATAL_IF
-#define LOG_ALWAYS_FATAL_IF(cond, ...) \
- ((__predict_false(cond)) \
- ? ((void)android_printAssert(#cond, LOG_TAG, ##__VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define LOG_ALWAYS_FATAL_IF(cond, ...) \
+ ((__predict_false(cond)) ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), \
+ ((void)android_printAssert(#cond, LOG_TAG, ##__VA_ARGS__))) \
+ : ((void)0))
#endif
#ifndef LOG_ALWAYS_FATAL
@@ -213,9 +213,10 @@
#if LOG_NDEBUG
#define ALOGV_IF(cond, ...) __FAKE_USE_VA_ARGS(__VA_ARGS__)
#else
-#define ALOGV_IF(cond, ...) \
- ((__predict_false(cond)) ? ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define ALOGV_IF(cond, ...) \
+ ((__predict_false(cond)) \
+ ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), (void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \
+ : ((void)0))
#endif
#endif
@@ -227,9 +228,10 @@
#endif
#ifndef ALOGD_IF
-#define ALOGD_IF(cond, ...) \
- ((__predict_false(cond)) ? ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define ALOGD_IF(cond, ...) \
+ ((__predict_false(cond)) \
+ ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), (void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \
+ : ((void)0))
#endif
/*
@@ -240,9 +242,10 @@
#endif
#ifndef ALOGI_IF
-#define ALOGI_IF(cond, ...) \
- ((__predict_false(cond)) ? ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define ALOGI_IF(cond, ...) \
+ ((__predict_false(cond)) \
+ ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), (void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \
+ : ((void)0))
#endif
/*
@@ -253,9 +256,10 @@
#endif
#ifndef ALOGW_IF
-#define ALOGW_IF(cond, ...) \
- ((__predict_false(cond)) ? ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define ALOGW_IF(cond, ...) \
+ ((__predict_false(cond)) \
+ ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), (void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \
+ : ((void)0))
#endif
/*
@@ -266,9 +270,10 @@
#endif
#ifndef ALOGE_IF
-#define ALOGE_IF(cond, ...) \
- ((__predict_false(cond)) ? ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \
- : __FAKE_USE_VA_ARGS(__VA_ARGS__))
+#define ALOGE_IF(cond, ...) \
+ ((__predict_false(cond)) \
+ ? (__FAKE_USE_VA_ARGS(__VA_ARGS__), (void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \
+ : ((void)0))
#endif
/* --------------------------------------------------------------------- */
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 5f4b8c3..20fb071 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -32,6 +32,10 @@
# cgroup for system_server and surfaceflinger
mkdir /dev/memcg/system 0550 system system
+ # symlink the Android specific /dev/tun to Linux expected /dev/net/tun
+ mkdir /dev/net 0755 root root
+ symlink ../tun /dev/net/tun
+
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit nice 40 40
@@ -69,6 +73,19 @@
mkdir /dev/boringssl 0755 root root
mkdir /dev/boringssl/selftest 0755 root root
+ # Mount binderfs
+ mkdir /dev/binderfs
+ mount binder binder /dev/binderfs stats=global
+ chmod 0755 /dev/binderfs
+
+ symlink /dev/binderfs/binder /dev/binder
+ symlink /dev/binderfs/hwbinder /dev/hwbinder
+ symlink /dev/binderfs/vndbinder /dev/vndbinder
+
+ chmod 0666 /dev/binderfs/hwbinder
+ chmod 0666 /dev/binderfs/binder
+ chmod 0666 /dev/binderfs/vndbinder
+
# Run boringssl self test for each ABI so that later processes can skip it. http://b/139348610
on early-init && property:ro.product.cpu.abilist32=*
exec_start boringssl_self_test32