mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-23 13:56:20 +00:00
cmd: gpt: fix calc_parts_list_len()
* Avoid incrementing by moving comma into strlen("uuid_disk=,") and
considering NUL byte.
* Appending a UUID only adds UUID_STR_LEN bytes.
Don't count the terminating NUL.
* The length of the hexadecimal representation of lba_int is
2 * sizeof(lba_int).
* We don't use a 'MiB' postfix but a '0x' prefix.
* The uuid field is only needed if configured.
Fixes: 2fcaa413b3
("gpt: harden set_gpt_info() against non NULL-terminated strings")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
parent
396f315520
commit
69f4d37302
1 changed files with 19 additions and 13 deletions
32
cmd/gpt.c
32
cmd/gpt.c
|
@ -162,26 +162,32 @@ static bool found_key(const char *str, const char *key)
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* calc_parts_list_len() - get size of partition table description
|
||||
*
|
||||
* @numparts: number of partitions
|
||||
* Return: string size including terminating NUL
|
||||
*/
|
||||
static int calc_parts_list_len(int numparts)
|
||||
{
|
||||
int partlistlen = UUID_STR_LEN + 1 + strlen("uuid_disk=");
|
||||
/* for the comma */
|
||||
partlistlen++;
|
||||
/* number of hexadecimal digits of the lbaint_t representation */
|
||||
const int lbaint_size = 2 * sizeof(lbaint_t);
|
||||
int partlistlen;
|
||||
|
||||
/* per-partition additions; numparts starts at 1, so this should be correct */
|
||||
partlistlen += numparts * (strlen("name=,") + PART_NAME_LEN + 1);
|
||||
/* media description including terminating NUL */
|
||||
partlistlen = strlen("uuid_disk=;") + UUID_STR_LEN + 1;
|
||||
/* per-partition descriptions; numparts */
|
||||
partlistlen += numparts * (strlen("name=,") + PART_NAME_LEN);
|
||||
/* see part.h for definition of struct disk_partition */
|
||||
partlistlen += numparts * (strlen("start=MiB,") + sizeof(lbaint_t) + 1);
|
||||
partlistlen += numparts * (strlen("size=MiB,") + sizeof(lbaint_t) + 1);
|
||||
partlistlen += numparts * (strlen("start=0x,") + lbaint_size);
|
||||
partlistlen += numparts * (strlen("size=0x,") + lbaint_size);
|
||||
#ifdef CONFIG_PARTITION_TYPE_GUID
|
||||
partlistlen += numparts * (strlen("type=,") + UUID_STR_LEN + 1);
|
||||
#endif
|
||||
partlistlen += numparts * strlen("bootable,");
|
||||
partlistlen += numparts * (strlen("uuid=;") + UUID_STR_LEN + 1);
|
||||
/* for the terminating null */
|
||||
partlistlen++;
|
||||
debug("Length of partitions_list is %d for %d partitions\n", partlistlen,
|
||||
numparts);
|
||||
if (IS_ENABLED(CONFIG_PARTITION_UUIDS))
|
||||
partlistlen += numparts * (strlen("uuid=;") + UUID_STR_LEN);
|
||||
debug("Length of partitions_list is %d for %d partitions\n",
|
||||
partlistlen, numparts);
|
||||
return partlistlen;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue