mirror of
https://git.proxmox.com/git/grub2
synced 2025-07-27 15:45:30 +00:00
disk/lvm: Do not crash if an expected string is not found
Clean up a bunch of cases where we could have strstr() fail and lead to us dereferencing NULL. We'll still leak memory in some cases (loops don't clean up allocations from earlier iterations if a later iteration fails) but at least we're not crashing. Signed-off-by: Daniel Axtens <dja@axtens.net> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
2958695c4c
commit
db29073fc7
@ -578,7 +578,16 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (seg->node_count != 1)
|
if (seg->node_count != 1)
|
||||||
|
{
|
||||||
seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = ");
|
seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = ");
|
||||||
|
if (p == NULL)
|
||||||
|
{
|
||||||
|
#ifdef GRUB_UTIL
|
||||||
|
grub_util_info ("unknown stripe_size");
|
||||||
|
#endif
|
||||||
|
goto lvs_segment_fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
seg->nodes = grub_calloc (seg->node_count,
|
seg->nodes = grub_calloc (seg->node_count,
|
||||||
sizeof (*stripe));
|
sizeof (*stripe));
|
||||||
@ -598,7 +607,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
{
|
{
|
||||||
p = grub_strchr (p, '"');
|
p = grub_strchr (p, '"');
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
continue;
|
goto lvs_segment_fail2;
|
||||||
q = ++p;
|
q = ++p;
|
||||||
while (*q != '"')
|
while (*q != '"')
|
||||||
q++;
|
q++;
|
||||||
@ -617,7 +626,10 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
stripe->start = grub_lvm_getvalue (&p, ",")
|
stripe->start = grub_lvm_getvalue (&p, ",")
|
||||||
* vg->extent_size;
|
* vg->extent_size;
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
continue;
|
{
|
||||||
|
grub_free (stripe->name);
|
||||||
|
goto lvs_segment_fail2;
|
||||||
|
}
|
||||||
|
|
||||||
stripe++;
|
stripe++;
|
||||||
}
|
}
|
||||||
@ -654,7 +666,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
|
|
||||||
p = grub_strchr (p, '"');
|
p = grub_strchr (p, '"');
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
continue;
|
goto lvs_segment_fail2;
|
||||||
q = ++p;
|
q = ++p;
|
||||||
while (*q != '"')
|
while (*q != '"')
|
||||||
q++;
|
q++;
|
||||||
@ -742,7 +754,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
p = p ? grub_strchr (p + 1, '"') : 0;
|
p = p ? grub_strchr (p + 1, '"') : 0;
|
||||||
p = p ? grub_strchr (p + 1, '"') : 0;
|
p = p ? grub_strchr (p + 1, '"') : 0;
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
continue;
|
goto lvs_segment_fail2;
|
||||||
q = ++p;
|
q = ++p;
|
||||||
while (*q != '"')
|
while (*q != '"')
|
||||||
q++;
|
q++;
|
||||||
|
Loading…
Reference in New Issue
Block a user