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 Vincent Batts
parent c28c107e24
commit 0726ab2d54

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;