osdep/freebsd: Fix partition calculation for EBR entries

For EBR partitions, "start" is the relative starting sector of the EBR
header itself, whereas "offset" is the relative starting byte of the
partition's contents, excluding the EBR header and any padding. Thus we
must use "offset", and divide by the sector size to convert to sectors.

Fixes Debian bug #923253.

Signed-off-by: James Clarke <jrtc27@jrtc27.com>
Reviewed-by: Colin Watson <cjwatson@ubuntu.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
James Clarke 2019-02-26 18:40:14 +00:00 committed by Daniel Kiper
parent 686db96646
commit 222cb8f6df

View file

@ -338,8 +338,8 @@ grub_util_follow_gpart_up (const char *name, grub_disk_addr_t *off_out, char **n
grub_util_follow_gpart_up (name_tmp, &off, name_out); grub_util_follow_gpart_up (name_tmp, &off, name_out);
free (name_tmp); free (name_tmp);
LIST_FOREACH (config, &provider->lg_config, lg_config) LIST_FOREACH (config, &provider->lg_config, lg_config)
if (strcasecmp (config->lg_name, "start") == 0) if (strcasecmp (config->lg_name, "offset") == 0)
off += strtoull (config->lg_val, 0, 10); off += strtoull (config->lg_val, 0, 10) / provider->lg_sectorsize;
if (off_out) if (off_out)
*off_out = off; *off_out = off;
return; return;