Commit 8f7102cf6bf744cbd9bf0e7fd79a82aaea989f81
Committed by
Tom Rini
1 parent
bb021013ba
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
disk: part_dos: fix part_get_info_extended() function
The check in part_get_info_extended() for a successful partition searching misses a condition for extended partition. In case of (ext_part_sector == 0), we should anyway mark the partition as found, even if it's an extended partition, i.e. (is_extended(pt->sys_ind) == 0). Otherwise, the extended partition (type 0x0f) will never be identified, and the following recursive call to part_get_info_extended() will get a wrong 'part_num' and 'which_part' parameter. In the end, all those partitions in extended table will not be identified. Let's add the missing OR condition of (ext_part_sector == 0) for is_extended() check to fix the problem. The issue is discovered by running fastboot flash to an extended partition on eMMC. $ fastboot flash mmcsda5 cache.img target reported max download size of 536870912 bytes sending 'mmcsda5' (18796 KB)... OKAY [ 2.144s] writing 'mmcsda5'... FAILED (remote: cannot find partition) finished. total time: 2.261s Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff
disk/part_dos.c
... | ... | @@ -220,7 +220,7 @@ |
220 | 220 | if (((pt->boot_ind & ~0x80) == 0) && |
221 | 221 | (pt->sys_ind != 0) && |
222 | 222 | (part_num == which_part) && |
223 | - (is_extended(pt->sys_ind) == 0)) { | |
223 | + (ext_part_sector == 0 || is_extended(pt->sys_ind) == 0)) { | |
224 | 224 | info->blksz = DOS_PART_DEFAULT_SECTOR; |
225 | 225 | info->start = (lbaint_t)(ext_part_sector + |
226 | 226 | le32_to_int(pt->start4)); |