diff options
| author | Stephen Warren <swarren@nvidia.com> | 2012-09-21 09:50:58 +0000 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2012-09-25 14:58:51 -0700 | 
| commit | c04d68c69458526d30bd542ff2f8f83cc20ccfc5 (patch) | |
| tree | a06620ac0682d9eaa1625d3ddf060e075a094dbd /disk/part_efi.c | |
| parent | 10a37fd7a40826c43a63591855346adf1a1ac02d (diff) | |
| download | olio-uboot-2014.01-c04d68c69458526d30bd542ff2f8f83cc20ccfc5.tar.xz olio-uboot-2014.01-c04d68c69458526d30bd542ff2f8f83cc20ccfc5.zip | |
disk: part_efi: range-check partition number
Enhance get_partition_info_efi() to range-check the partition number.
This prevents invalid partitions being accessed, and prevents access
beyond the end of the gpt_pte[] array.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'disk/part_efi.c')
| -rw-r--r-- | disk/part_efi.c | 7 | 
1 files changed, 7 insertions, 0 deletions
| diff --git a/disk/part_efi.c b/disk/part_efi.c index 02927a0d9..2962fd8f6 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -173,6 +173,13 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,  		return -1;  	} +	if (part > le32_to_int(gpt_head->num_partition_entries) || +	    !is_pte_valid(&gpt_pte[part - 1])) { +		printf("%s: *** ERROR: Invalid partition number %d ***\n", +			__func__, part); +		return -1; +	} +  	/* The ulong casting limits the maximum disk size to 2 TB */  	info->start = (ulong) le64_to_int(gpt_pte[part - 1].starting_lba);  	/* The ending LBA is inclusive, to calculate size, add 1 to it */ |