Commit 8f7102cf6bf744cbd9bf0e7fd79a82aaea989f81

Authored by Shawn Guo
Committed by Tom Rini
1 parent bb021013ba

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

... ... @@ -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));