adb: remount for /system as root

We can not mount overlayfs on root / as it will intercept all file
transactions.  Thus must remount /system instead.

Test: manual
Bug: 109821005
Bug: 115751838
Change-Id: Idf646b8c1ca8a0d006bf64e23a76a7e909f9162a
This commit is contained in:
Mark Salyzyn 2018-06-06 13:10:40 -07:00
parent f35db9b11b
commit 04aa426c5f

View file

@ -146,6 +146,10 @@ static bool remount_partition(int fd, const char* dir) {
return true;
}
bool is_root = strcmp(dir, "/") == 0;
if (is_root && !find_mount("/system", false).empty()) {
dir = "/system";
is_root = false;
}
std::string dev = find_mount(dir, is_root);
// Even if the device for the root is not found, we still try to remount it
// as rw. This typically only happens when running Android in a container:
@ -226,7 +230,9 @@ void remount_service(unique_fd fd, const std::string& cmd) {
// Find partitions that are deduplicated, and can be un-deduplicated.
std::set<std::string> dedup;
for (const auto& partition : partitions) {
for (const auto& part : partitions) {
auto partition = part;
if ((part == "/") && !find_mount("/system", false).empty()) partition = "/system";
std::string dev = find_mount(partition.c_str(), partition == "/");
if (dev.empty() || !fs_mgr_has_shared_blocks(partition, dev)) {
continue;