Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7082f688 authored by David Anderson's avatar David Anderson
Browse files

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

Bug: 123666267
Test: sysfs reports -verity suffix for verity node names
Change-Id: I07fe428ce86209825e39a0ebf7b4d622b93cc81b
parent ee725f61
Loading
Loading
Loading
Loading
+2 −10
Original line number Diff line number Diff line
@@ -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)) {
+11 −0
Original line number Diff line number Diff line
@@ -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

+5 −0
Original line number Diff line number Diff line
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -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;
    }