Merge "Fixed a few minor nits in liblp"
This commit is contained in:
commit
7909d650bd
4 changed files with 15 additions and 6 deletions
|
@ -269,6 +269,11 @@ void MetadataBuilder::ImportExtents(Partition* dest, const LpMetadata& metadata,
|
|||
}
|
||||
|
||||
static bool VerifyDeviceProperties(const BlockDeviceInfo& device_info) {
|
||||
if (device_info.logical_block_size == 0) {
|
||||
LERROR << "Block device " << device_info.partition_name
|
||||
<< " logical block size must not be zero.";
|
||||
return false;
|
||||
}
|
||||
if (device_info.logical_block_size % LP_SECTOR_SIZE != 0) {
|
||||
LERROR << "Block device " << device_info.partition_name
|
||||
<< " logical block size must be a multiple of 512.";
|
||||
|
@ -335,7 +340,7 @@ bool MetadataBuilder::Init(const std::vector<BlockDeviceInfo>& block_devices,
|
|||
out.alignment = device_info.alignment;
|
||||
out.alignment_offset = device_info.alignment_offset;
|
||||
out.size = device_info.size;
|
||||
if (device_info.partition_name.size() >= sizeof(out.partition_name)) {
|
||||
if (device_info.partition_name.size() > sizeof(out.partition_name)) {
|
||||
LERROR << "Partition name " << device_info.partition_name << " exceeds maximum length.";
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ typedef struct LpMetadataGeometry {
|
|||
* num_entries, and the result must not overflow a 32-bit signed integer.
|
||||
*/
|
||||
typedef struct LpMetadataTableDescriptor {
|
||||
/* 0: Location of the table, relative to the metadata header. */
|
||||
/* 0: Location of the table, relative to end of the metadata header. */
|
||||
uint32_t offset;
|
||||
/* 4: Number of entries in the table. */
|
||||
uint32_t num_entries;
|
||||
|
@ -272,7 +272,7 @@ typedef struct LpMetadataPartitionGroup {
|
|||
|
||||
/* 40: Maximum size in bytes. If 0, the group has no maximum size. */
|
||||
uint64_t maximum_size;
|
||||
} LpMetadataPartitionGroup;
|
||||
} __attribute__((packed)) LpMetadataPartitionGroup;
|
||||
|
||||
/* This flag is only intended to be used with super_empty.img and super.img on
|
||||
* retrofit devices. If set, the group needs a slot suffix to be interpreted
|
||||
|
@ -323,7 +323,7 @@ typedef struct LpMetadataBlockDevice {
|
|||
|
||||
/* 60: Flags (see LP_BLOCK_DEVICE_* flags below). */
|
||||
uint32_t flags;
|
||||
} LpMetadataBlockDevice;
|
||||
} __attribute__((packed)) LpMetadataBlockDevice;
|
||||
|
||||
/* This flag is only intended to be used with super_empty.img and super.img on
|
||||
* retrofit devices. On these devices there are A and B super partitions, and
|
||||
|
|
|
@ -256,6 +256,10 @@ static std::unique_ptr<LpMetadata> ParseMetadata(const LpMetadataGeometry& geome
|
|||
LERROR << "Logical partition has invalid attribute set.";
|
||||
return nullptr;
|
||||
}
|
||||
if (partition.first_extent_index + partition.num_extents < partition.first_extent_index) {
|
||||
LERROR << "Logical partition first_extent_index + num_extents overflowed.";
|
||||
return nullptr;
|
||||
}
|
||||
if (partition.first_extent_index + partition.num_extents > header.extents.num_entries) {
|
||||
LERROR << "Logical partition has invalid extent list.";
|
||||
return nullptr;
|
||||
|
|
|
@ -373,11 +373,11 @@ bool UpdatePartitionTable(const IPartitionOpener& opener, const std::string& sup
|
|||
// safety.
|
||||
std::string old_blob;
|
||||
if (!ValidateAndSerializeMetadata(opener, *backup.get(), slot_suffix, &old_blob)) {
|
||||
LERROR << "Error serializing primary metadata to repair corrupted backup";
|
||||
LERROR << "Error serializing backup metadata to repair corrupted primary";
|
||||
return false;
|
||||
}
|
||||
if (!WritePrimaryMetadata(fd, metadata, slot_number, old_blob, writer)) {
|
||||
LERROR << "Error writing primary metadata to repair corrupted backup";
|
||||
LERROR << "Error writing backup metadata to repair corrupted primary";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue