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: Isaac M. Marcos
Subject: Re: grub-probe gets a segfault
Date: Wed, 28 May 2008 13:58:53 -0430
User-agent: KMail/1.9.9

El Wednesday 28 May 2008 09:06:51 Robert Millan escribió:
> 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).

I also believe It should be included. How is that done?

> > 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)



-- 
Isaac M. Marcos
GPG key 0xC9045C1B
5633 ECAF 44B1 8A5D 9371 DCDA 4620 A016 C904 5C1B

The only place success comes before work is in the dictionary.
VINCE LOMBARDI




reply via email to

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