l4-hurd
[Top][All Lists]
Advanced

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

overflow of high address of memdesc (was: Re: grub/laden bugs


From: Marcus Brinkmann
Subject: overflow of high address of memdesc (was: Re: grub/laden bugs
Date: Thu, 4 Sep 2003 03:14:49 +0200
User-agent: Mutt/1.5.4i

Hi,

Here is an example case of where the current specification of the high
address in a memory descriptor is not sufficient to express existing memory
configurations.

To the L4 people, the question is if the sixth memory descriptor below
should have the high address 0, 0xfffffe00, or some other value.

On Thu, Aug 28, 2003 at 08:58:05AM +0200, Niels M?ller wrote:
> > > The mapping is something like
> > > 
> > > n  base        length       type
> > > 1         0x0     0x9 fc00  1
> > > 2    0x9 fc00        0x400  2
> > > 3   0x10 0000  0x1fee 2800  1
> > > 4 0x1ffe 2800     0x1 d800  2
> > > 5 0xfeda 0000     0x6 0000  2
> > > 6 0xffb8 0000    0x48 0000  2
> > 
> > Why do you think these are bogus?
> 
> Well, I don't fully understand this, the reasons why I think that the
> last entries are bogus is that that (i) Marcus' laden program prints
> an error message ("More than 4GB RAM not supported by L4" or some
> such) and aborts when encountering this map, (ii) L4 fails to boot if
> I use a less paranoid version of laden, and (iii) that the first three
> entries seems to describe the memory in the machine that I am aware
> of. But I may be too ignorant about PC hardware (the computer in
> question is a dell latitude).

The problem here is that the last region extends to 2^32 - 1, which is the
last byte you can possibly express using 32 bit numbers.  L4's memory
descriptors can not express this:  They use low and high addresses, where
the high address is the end address PLUS 1 (and all lower 10 bits zero).

So what should laden do?  It can not store 0x100000000 as the high address
in an L4 memory descriptor.  If it would try, it would overflow and set the
high address to 0.  This is what kickstart seems to do, but it is clearly
wrong, unless the L4 specification would say that "0" as high address means
0x100000000.

The alternative would be to just drop the last page, and set the high
address to 0xfffffe00.  This seems to be sane within the current L4
specification.

Thanks,
Marcus

-- 
`Rhubarb is no Egyptian god.' GNU      http://www.gnu.org    address@hidden
Marcus Brinkmann              The Hurd http://www.gnu.org/software/hurd/
address@hidden
http://www.marcus-brinkmann.de/




reply via email to

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