Re: [PATCH] bootm: abort if kernel is outside the first 128MB

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

 



On Mon, 29 Oct 2018 12:55:53 +0100
Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> wrote:
> > diff --git a/arch/arm/lib32/bootm.c b/arch/arm/lib32/bootm.c
> > index 4cf570e57..42febdc71 100644
> > --- a/arch/arm/lib32/bootm.c
> > +++ b/arch/arm/lib32/bootm.c
> > @@ -121,6 +121,12 @@ static int get_kernel_addresses(size_t
> > image_size, spacing += image_decomp_size;
> >  	}
> >  
> > +	if ((*load_address - mem_start) > SZ_128M) {
> > +		printf("boot aborted: kernel address outside
> > 128MiB "
> > +		       "(0x%08lx)\n", *load_address);
> > +		return -ENOMEM;
> > +	}  
> 
> This is a bit harsh. The 128MiB problem only exists with
> CONFIG_AUTO_ZRELADDR enabled in the kernel, otherwise it's fine to
> put the kernel above that limit.

My patch was also a test-balloon for me to learn. Instead of returning
maybe a warning could be emitted - maybe in verbose mode only?

Hmm, no not in only-verbose-mode, because it my case it silently didn't
work, whereas with an error/warning I would have immediately understood
what's wrong.

> We only put the kernel above the 128MiB limit because we want to find
> a place where the kernel doesn't have to move itself around in order
> to not overwrite itself during decompression.
> 
> Could we instead just use 128MiB as an upper limit to put the kernel
> to?

Would that mean the maximum address is (always):

  load_address = mem_end > SZ_128M ? mem_start + SZ_128M : end_of_ram;
  load_address -= image_size + 1MiB_margin_for_dtb;

or is it only the start_address which has to be inside the first 128MB?

regards,
--
Patrick.

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux