Merge changes from topic "ReadDefaultFstab_requires_sepolicies"
* changes: fs_mgr: Refactor ReadDefaultFstab() and ReadFstabFromFile() fs_mgr: Strengthen ReadFstabFromFile() around gsi_public_metadata_file
This commit is contained in:
commit
aeb962f09a
1 changed files with 37 additions and 29 deletions
|
@ -680,7 +680,7 @@ void EnableMandatoryFlags(Fstab* fstab) {
|
|||
}
|
||||
}
|
||||
|
||||
bool ReadFstabFromFile(const std::string& path, Fstab* fstab) {
|
||||
bool ReadFstabFromFile(const std::string& path, Fstab* fstab_out) {
|
||||
auto fstab_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(path.c_str(), "re"), fclose};
|
||||
if (!fstab_file) {
|
||||
PERROR << __FUNCTION__ << "(): cannot open file: '" << path << "'";
|
||||
|
@ -689,31 +689,43 @@ bool ReadFstabFromFile(const std::string& path, Fstab* fstab) {
|
|||
|
||||
bool is_proc_mounts = path == "/proc/mounts";
|
||||
|
||||
if (!ReadFstabFile(fstab_file.get(), is_proc_mounts, fstab)) {
|
||||
Fstab fstab;
|
||||
if (!ReadFstabFile(fstab_file.get(), is_proc_mounts, &fstab)) {
|
||||
LERROR << __FUNCTION__ << "(): failed to load fstab from : '" << path << "'";
|
||||
return false;
|
||||
}
|
||||
if (!is_proc_mounts && !access(android::gsi::kGsiBootedIndicatorFile, F_OK)) {
|
||||
// This is expected to fail if host is android Q, since Q doesn't
|
||||
// support DSU slotting. The DSU "active" indicator file would be
|
||||
// non-existent or empty if DSU is enabled within the guest system.
|
||||
// In that case, just use the default slot name "dsu".
|
||||
std::string dsu_slot;
|
||||
if (!android::gsi::GetActiveDsu(&dsu_slot)) {
|
||||
PWARNING << __FUNCTION__ << "(): failed to get active dsu slot";
|
||||
if (!is_proc_mounts) {
|
||||
if (!access(android::gsi::kGsiBootedIndicatorFile, F_OK)) {
|
||||
// This is expected to fail if host is android Q, since Q doesn't
|
||||
// support DSU slotting. The DSU "active" indicator file would be
|
||||
// non-existent or empty if DSU is enabled within the guest system.
|
||||
// In that case, just use the default slot name "dsu".
|
||||
std::string dsu_slot;
|
||||
if (!android::gsi::GetActiveDsu(&dsu_slot) && errno != ENOENT) {
|
||||
PERROR << __FUNCTION__ << "(): failed to get active DSU slot";
|
||||
return false;
|
||||
}
|
||||
if (dsu_slot.empty()) {
|
||||
dsu_slot = "dsu";
|
||||
LWARNING << __FUNCTION__ << "(): assuming default DSU slot: " << dsu_slot;
|
||||
}
|
||||
// This file is non-existent on Q vendor.
|
||||
std::string lp_names;
|
||||
if (!ReadFileToString(gsi::kGsiLpNamesFile, &lp_names) && errno != ENOENT) {
|
||||
PERROR << __FUNCTION__ << "(): failed to read DSU LP names";
|
||||
return false;
|
||||
}
|
||||
TransformFstabForDsu(&fstab, dsu_slot, Split(lp_names, ","));
|
||||
} else if (errno != ENOENT) {
|
||||
PERROR << __FUNCTION__ << "(): failed to access() DSU booted indicator";
|
||||
return false;
|
||||
}
|
||||
if (dsu_slot.empty()) {
|
||||
dsu_slot = "dsu";
|
||||
}
|
||||
|
||||
std::string lp_names;
|
||||
ReadFileToString(gsi::kGsiLpNamesFile, &lp_names);
|
||||
TransformFstabForDsu(fstab, dsu_slot, Split(lp_names, ","));
|
||||
}
|
||||
|
||||
SkipMountingPartitions(fstab, false /* verbose */);
|
||||
EnableMandatoryFlags(fstab);
|
||||
SkipMountingPartitions(&fstab, false /* verbose */);
|
||||
EnableMandatoryFlags(&fstab);
|
||||
|
||||
*fstab_out = std::move(fstab);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -788,10 +800,8 @@ bool SkipMountingPartitions(Fstab* fstab, bool verbose) {
|
|||
|
||||
// Loads the fstab file and combines with fstab entries passed in from device tree.
|
||||
bool ReadDefaultFstab(Fstab* fstab) {
|
||||
Fstab dt_fstab;
|
||||
ReadFstabFromDt(&dt_fstab, false /* verbose */);
|
||||
|
||||
*fstab = std::move(dt_fstab);
|
||||
fstab->clear();
|
||||
ReadFstabFromDt(fstab, false /* verbose */);
|
||||
|
||||
std::string default_fstab_path;
|
||||
// Use different fstab paths for normal boot and recovery boot, respectively
|
||||
|
@ -802,16 +812,14 @@ bool ReadDefaultFstab(Fstab* fstab) {
|
|||
}
|
||||
|
||||
Fstab default_fstab;
|
||||
if (!default_fstab_path.empty()) {
|
||||
ReadFstabFromFile(default_fstab_path, &default_fstab);
|
||||
if (!default_fstab_path.empty() && ReadFstabFromFile(default_fstab_path, &default_fstab)) {
|
||||
for (auto&& entry : default_fstab) {
|
||||
fstab->emplace_back(std::move(entry));
|
||||
}
|
||||
} else {
|
||||
LINFO << __FUNCTION__ << "(): failed to find device default fstab";
|
||||
}
|
||||
|
||||
for (auto&& entry : default_fstab) {
|
||||
fstab->emplace_back(std::move(entry));
|
||||
}
|
||||
|
||||
return !fstab->empty();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue