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

Commit 2ca0700b authored by David Anderson's avatar David Anderson
Browse files

liblp: Handle invalid alignment offsets correctly.

When stacking devices with dm-linear, it is possible to get a -1
alignment offset. In this case we should set alignment_offset to 0
rather than fail later trying to divide -1 by the sector size.

Bug: 134536978
Test: manual test
Change-Id: I3862fdda69531a3b230b7316707469a49ba871d6
parent 3215fd93
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -64,6 +64,12 @@ bool GetBlockDeviceInfo(const std::string& block_device, BlockDeviceInfo* device
        PERROR << __PRETTY_FUNCTION__ << "BLKALIGNOFF failed on " << block_device;
        return false;
    }
    // The kernel can return -1 here when misaligned devices are stacked (i.e.
    // device-mapper).
    if (alignment_offset == -1) {
        alignment_offset = 0;
    }

    int logical_block_size;
    if (ioctl(fd, BLKSSZGET, &logical_block_size) < 0) {
        PERROR << __PRETTY_FUNCTION__ << "BLKSSZGET failed on " << block_device;