Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Jun 2015 17:00:36 +0000 (UTC)
From:      Maxim Sobolev <sobomax@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r284599 - head/sys/boot/uboot/lib
Message-ID:  <201506191700.t5JH0a42035718@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sobomax
Date: Fri Jun 19 17:00:36 2015
New Revision: 284599
URL: https://svnweb.freebsd.org/changeset/base/284599

Log:
  Fix bug in the ubldr introduced in the rev.283035. The new code
  fails to properly consider memory regions when the loader is
  located below of those regions or engulfs their lower limit. This
  results in "not enough RAM to load kernel" panic, which is totally
  bogus. On top of that, there are some variables that can be left
  unitialized in those cases, which might cause it fail with memory
  access violation instead of panic while trying to load kernel to
  a wrong or non-existing address of memory.
  
  Augment the code to properly deal with the loader being below or
  at the lower bound of the memory region in question. Also, don't
  leave ununitialized variables behind.
  
  Reviewed by:	ian

Modified:
  head/sys/boot/uboot/lib/copy.c

Modified: head/sys/boot/uboot/lib/copy.c
==============================================================================
--- head/sys/boot/uboot/lib/copy.c	Fri Jun 19 14:56:24 2015	(r284598)
+++ head/sys/boot/uboot/lib/copy.c	Fri Jun 19 17:00:36 2015	(r284599)
@@ -118,6 +118,13 @@ uboot_loadaddr(u_int type, void *data, u
 					this_block = eubldr;
 					this_size = eblock - eubldr;
 				}
+			} else if (subldr < sblock && eubldr < eblock) {
+				/* Loader is below or engulfs the sblock */
+				this_block = (eubldr < sblock) ? sblock : eubldr;
+				this_size = eblock - this_block;
+			} else {
+				this_block = 0;
+				this_size = 0;
 			}
 			if (biggest_size < this_size) {
 				biggest_block = this_block;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506191700.t5JH0a42035718>