Merge "Fix device mapper name clashes on non-A/B devices."

This commit is contained in:
David Anderson 2019-04-02 20:16:36 +00:00 committed by Gerrit Code Review
commit 97d1fccd5b
4 changed files with 21 additions and 12 deletions

View file

@ -1602,14 +1602,6 @@ bool fs_mgr_load_verity_state(int* mode) {
return true;
}
std::string fs_mgr_get_verity_device_name(const FstabEntry& entry) {
if (entry.mount_point == "/") {
// In AVB, the dm device name is vroot instead of system.
return entry.fs_mgr_flags.avb ? "vroot" : "system";
}
return Basename(entry.mount_point);
}
bool fs_mgr_is_verity_enabled(const FstabEntry& entry) {
if (!entry.fs_mgr_flags.verify && !entry.fs_mgr_flags.avb) {
return false;
@ -1617,7 +1609,7 @@ bool fs_mgr_is_verity_enabled(const FstabEntry& entry) {
DeviceMapper& dm = DeviceMapper::Instance();
std::string mount_point = fs_mgr_get_verity_device_name(entry);
std::string mount_point = GetVerityDeviceName(entry);
if (dm.GetState(mount_point) == DmDeviceState::INVALID) {
return false;
}
@ -1646,7 +1638,7 @@ bool fs_mgr_verity_is_check_at_most_once(const android::fs_mgr::FstabEntry& entr
}
DeviceMapper& dm = DeviceMapper::Instance();
std::string device = fs_mgr_get_verity_device_name(entry);
std::string device = GetVerityDeviceName(entry);
std::vector<DeviceMapper::TargetInfo> table;
if (dm.GetState(device) == DmDeviceState::INVALID || !dm.GetTableInfo(device, &table)) {

View file

@ -768,6 +768,17 @@ FstabEntry BuildGsiSystemFstabEntry() {
return system;
}
std::string GetVerityDeviceName(const FstabEntry& entry) {
std::string base_device;
if (entry.mount_point == "/") {
// In AVB, the dm device name is vroot instead of system.
base_device = entry.fs_mgr_flags.avb ? "vroot" : "system";
} else {
base_device = android::base::Basename(entry.mount_point);
}
return base_device + "-verity";
}
} // namespace fs_mgr
} // namespace android

View file

@ -107,5 +107,10 @@ FstabEntry BuildGsiSystemFstabEntry();
std::set<std::string> GetBootDevices();
// Return the name of the dm-verity device for the given fstab entry. This does
// not check whether the device is valid or exists; it merely returns the
// expected name.
std::string GetVerityDeviceName(const FstabEntry& entry);
} // namespace fs_mgr
} // namespace android

View file

@ -105,14 +105,15 @@ bool HashtreeDmVeritySetup(FstabEntry* fstab_entry, const FsAvbHashtreeDescripto
table.set_readonly(true);
const std::string mount_point(Basename(fstab_entry->mount_point));
const std::string device_name(GetVerityDeviceName(*fstab_entry));
android::dm::DeviceMapper& dm = android::dm::DeviceMapper::Instance();
if (!dm.CreateDevice(mount_point, table)) {
if (!dm.CreateDevice(device_name, table)) {
LERROR << "Couldn't create verity device!";
return false;
}
std::string dev_path;
if (!dm.GetDmDevicePathByName(mount_point, &dev_path)) {
if (!dm.GetDmDevicePathByName(device_name, &dev_path)) {
LERROR << "Couldn't get verity device path!";
return false;
}