[PATCH 1/2] kexec: align initrd when no --image-size passed

Simon Horman horms at verge.net.au
Wed Mar 19 23:51:02 EDT 2014


On Thu, Mar 20, 2014 at 11:25:07AM +0800, Dave Young wrote:
> On 03/20/14 at 10:36am, Wang Nan wrote:
> > Before this patch, when no --image-size passed, initrd_base is caculated using
> > base + len * 4, which is unaligned, and unable to pass check in
> > add_segment_phys_virt():
> > 
> > 	if (base & (pagesize -1)) {
> > 		die("Base address: 0x%lx is not page aligned\n", base);
> > 	}
> > 
> > This patch also uses getpagesize() instead of hard encoded 4096.
> > 
> > Signed-off-by: Wang Nan <wangnan0 at huawei.com>
> > Cc: Simon Horman <horms at verge.net.au>
> > Cc: Dave Young <dyoung at redhat.com>
> > Cc: Geng Hui <hui.geng at huawei.com>
> > ---
> >  kexec/arch/arm/kexec-zImage-arm.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/kexec/arch/arm/kexec-zImage-arm.c b/kexec/arch/arm/kexec-zImage-arm.c
> > index 792187a..8a35018 100644
> > --- a/kexec/arch/arm/kexec-zImage-arm.c
> > +++ b/kexec/arch/arm/kexec-zImage-arm.c
> > @@ -347,11 +347,11 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len,
> >  		/* If the image size was passed as command line argument,
> >  		 * use that value for determining the address for initrd,
> >  		 * atags and dtb images. page-align the given length.*/
> > -		initrd_base = base + _ALIGN(kexec_arm_image_size, 4096);
> > +		initrd_base = base + _ALIGN(kexec_arm_image_size, getpagesize());
> >  	} else {
> >  		/* Otherwise, assume the maximum kernel compression ratio
> >  		 * is 4, and just to be safe, place ramdisk after that */
> > -		initrd_base = base + len * 4;
> > +		initrd_base = base + _ALIGN(len * 4, getpagesize());
> >  	}
> >  
> >  	if (use_atags) {
> > -- 
> > 1.8.4
> > 
> 
> Acked-by: Dave Young <dyoung at redhat.com>

Thanks, applied.



More information about the kexec mailing list