From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932895AbbCDPkE (ORCPT ); Wed, 4 Mar 2015 10:40:04 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42508 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932462AbbCDPkB (ORCPT ); Wed, 4 Mar 2015 10:40:01 -0500 Date: Wed, 4 Mar 2015 23:39:44 +0800 From: Baoquan He To: Yinghai Lu Cc: "H. Peter Anvin" , Kees Cook , Vivek Goyal , Andy Lutomirski , Andrew Morton , Thomas Gleixner , Ingo Molnar , Linux Kernel Mailing List Subject: Re: [PATCH v2 7/9] get the random phy addr according to slot_area info Message-ID: <20150304153944.GA1462@dhcp-17-102.nay.redhat.com> References: <1425308310-2318-1-git-send-email-bhe@redhat.com> <1425308310-2318-8-git-send-email-bhe@redhat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="9amGYk9869ThD9tj" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --9amGYk9869ThD9tj Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Yinghai, I got the reason and made a debug patch to fix it. Could you please apply it on top of this patchset and try again? Then it will behave well and just return 0x13c000000 since no random is got. Please check the attachment. Thanks Baoquan On 03/03/15 at 12:45am, Yinghai Lu wrote: > after fixing that, on the system with 4G ram: i got: > > early console in decompress_kernel > KASLR using RDTSC... > decompress_kernel: > input: [0x13f5ed3b4-0x13ff6a64b], output: 0x153000000, heap: > [0x13ff76000-0x13ff7dfff] > > Decompressing Linux... xz... > > XZ-compressed data is corrupt > > > without the patch, I have: > > early console in decompress_kernel > KASLR could not find suitable E820 region... > decompress_kernel: > input: [0x13f5ee3b4-0x13ff6b64b], output: 0x13cc00000, heap: > [0x13ff76000-0x13ff7dfff] > > Decompressing Linux... xz... Parsing ELF... done. > ... > [ 0.016848] e820: BIOS-provided physical RAM map (sanitized by setup): > [ 0.018854] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable > [ 0.020982] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved > [ 0.023166] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved > [ 0.025783] BIOS-e820: [mem 0x0000000000100000-0x00000000bffdffff] usable > [ 0.027901] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved > [ 0.030079] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved > [ 0.032252] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved > [ 0.034437] BIOS-e820: [mem 0x0000000100000000-0x000000013fffffff] usable > > so you code now select range that is out of boundary to non ram area. > > Thanks > > Yinghai --9amGYk9869ThD9tj Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="yh-fix.patch" diff --git a/arch/x86/boot/compressed/aslr.c b/arch/x86/boot/compressed/aslr.c index 3114ae0..e351b99 100644 --- a/arch/x86/boot/compressed/aslr.c +++ b/arch/x86/boot/compressed/aslr.c @@ -301,18 +301,17 @@ static int process_e820_entry(struct e820entry *entry, region.start = entry->addr; region.size = entry->size; +repeat: + start_orig = region.start; + /* Potentially raise address to minimum location. */ if (region.start < minimum) region.start = minimum; -repeat: - /* Return if slot area array is full */ if ( slot_area_index == MAX_SLOT_AREA ) return; - start_orig = region.start; - /* Potentially raise address to meet alignment requirements. */ region.start = ALIGN(region.start, CONFIG_PHYSICAL_ALIGN); --9amGYk9869ThD9tj--