2008-10-05 Hans Lambermont <hans@lambermont.dyndns.org>
* disk/lvm.c (grub_lvm_scan_device): Allocate buffer space for the circular metadata worst case scenario. If the metadata is circular then copy the wrap in place. * include/grub/lvm.h: Add GRUB_LVM_MDA_HEADER_SIZE, from the LVM2 project lib/format_text/layout.h Circular metadata bug found and patch debugged by Jan Derk Gerlings.
This commit is contained in:
parent
7a36edcafd
commit
1b7748eb13
3 changed files with 22 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-10-05 Hans Lambermont <hans@lambermont.dyndns.org>
|
||||||
|
|
||||||
|
* disk/lvm.c (grub_lvm_scan_device): Allocate buffer space for the
|
||||||
|
circular metadata worst case scenario. If the metadata is circular
|
||||||
|
then copy the wrap in place.
|
||||||
|
* include/grub/lvm.h: Add GRUB_LVM_MDA_HEADER_SIZE, from the LVM2
|
||||||
|
project lib/format_text/layout.h
|
||||||
|
Circular metadata bug found and patch debugged by Jan Derk Gerlings.
|
||||||
|
|
||||||
2008-10-03 Felix Zielcke <fzielcke@z-51.de>
|
2008-10-03 Felix Zielcke <fzielcke@z-51.de>
|
||||||
|
|
||||||
* util/i386/pc/grub-install.in: Source grub-mkconfig_lib instead of update-grub_lib.
|
* util/i386/pc/grub-install.in: Source grub-mkconfig_lib instead of update-grub_lib.
|
||||||
|
|
13
disk/lvm.c
13
disk/lvm.c
|
@ -281,7 +281,8 @@ grub_lvm_scan_device (const char *name)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
metadatabuf = grub_malloc (mda_size);
|
/* Allocate buffer space for the circular worst-case scenario. */
|
||||||
|
metadatabuf = grub_malloc (2 * mda_size);
|
||||||
if (! metadatabuf)
|
if (! metadatabuf)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -300,6 +301,16 @@ grub_lvm_scan_device (const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
rlocn = mdah->raw_locns;
|
rlocn = mdah->raw_locns;
|
||||||
|
if (grub_le_to_cpu64 (rlocn->offset) + grub_le_to_cpu64 (rlocn->size) >
|
||||||
|
grub_le_to_cpu64 (mdah->size))
|
||||||
|
{
|
||||||
|
/* Metadata is circular. Copy the wrap in place. */
|
||||||
|
grub_memcpy (metadatabuf + mda_size,
|
||||||
|
metadatabuf + GRUB_LVM_MDA_HEADER_SIZE,
|
||||||
|
grub_le_to_cpu64 (rlocn->offset) +
|
||||||
|
grub_le_to_cpu64 (rlocn->size) -
|
||||||
|
grub_le_to_cpu64 (mdah->size));
|
||||||
|
}
|
||||||
p = q = metadatabuf + grub_le_to_cpu64 (rlocn->offset);
|
p = q = metadatabuf + grub_le_to_cpu64 (rlocn->offset);
|
||||||
|
|
||||||
while (*q != ' ' && q < metadatabuf + mda_size)
|
while (*q != ' ' && q < metadatabuf + mda_size)
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct grub_lvm_pv_header {
|
||||||
|
|
||||||
#define GRUB_LVM_FMTT_MAGIC "\040\114\126\115\062\040\170\133\065\101\045\162\060\116\052\076"
|
#define GRUB_LVM_FMTT_MAGIC "\040\114\126\115\062\040\170\133\065\101\045\162\060\116\052\076"
|
||||||
#define GRUB_LVM_FMTT_VERSION 1
|
#define GRUB_LVM_FMTT_VERSION 1
|
||||||
|
#define GRUB_LVM_MDA_HEADER_SIZE 512
|
||||||
|
|
||||||
/* On disk */
|
/* On disk */
|
||||||
struct grub_lvm_raw_locn {
|
struct grub_lvm_raw_locn {
|
||||||
|
|
Loading…
Reference in a new issue