grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: grub-probe gets a segfault


From: Robert Millan
Subject: Re: grub-probe gets a segfault
Date: Wed, 28 May 2008 15:36:51 +0200
User-agent: Mutt/1.5.13 (2006-08-11)

On Thu, May 22, 2008 at 06:52:02AM -0400, Pavel Roskin wrote:
> On Wed, 2008-05-21 at 20:20 -0430, Isaac M. Marcos wrote:
> > Today, I bump on this problem again on updating kernel. Because of this 
> > fault, 
> > update-initramfs reports a failure. It can't find "/".
> > 
> > grub-probe -t device /      -->     segfault!!
> 
> This patch should help.  It checks for the buffer overrun.  I still feel
> uneasy about applying it because it hides a bigger problem.

The constraints are a bit unusual here.  We don't have a handler for
exceptions, so this error could mean your machine stops booting.  And
additionally this code is in fact run in situations where LVM might not
be used (e.g. grub-probe is probing something in an unrelated partition).

In both cases IMHO it's much more desireable to avoid the problem and accept
the lesser evil that our LVM code might not be as complete, but at least it's
robust.

So I'd recommend to get this patch in.  If that makes you feel better about
this, how about adding a warning message in this fail condition?  (though,
note we have many fail conditions like this one in that function, and these
don't have any warning atm).

> diff --git a/disk/lvm.c b/disk/lvm.c
> index 1d898ff..997d15c 100644
> --- a/disk/lvm.c
> +++ b/disk/lvm.c
> @@ -302,9 +302,12 @@ grub_lvm_scan_device (const char *name)
>    rlocn = mdah->raw_locns;
>    p = q = metadatabuf + grub_le_to_cpu64 (rlocn->offset);
>  
> -  while (*q != ' ')
> +  while (*q != ' ' && q < metadatabuf + mda_size)
>      q++;
>  
> +  if (q == metadatabuf + mda_size)
> +    goto fail2;
> +
>    vgname_len = q - p;
>    vgname = grub_malloc (vgname_len + 1);
>    if (!vgname)

-- 
Robert Millan

<GPLv2> I know my rights; I want my phone call!
<DRM> What good is a phone call… if you are unable to speak?
(as seen on /.)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]