On devices with 4k logical block size, the imsm signature
is located 8k from the end of the device, not 1k as is
the case for devices with 512 LBS.
{
char imsm_signature[IMSM_SIG_LEN];
uint64_t off = (devsize_sectors * 512) - 1024;
+ unsigned int physical_block_size = 0;
+ unsigned int logical_block_size = 0;
+
+ if (!dev_get_direct_block_sizes(dev, &physical_block_size, &logical_block_size))
+ return_0;
+
+ if (logical_block_size == 4096)
+ off = (devsize_sectors * 512) - 8192;
+ else
+ off = (devsize_sectors * 512) - 1024;
if (!dev_read_bytes(dev, off, IMSM_SIG_LEN, imsm_signature))
return_0;