Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755820Ab3DZWBl (ORCPT ); Fri, 26 Apr 2013 18:01:41 -0400 Received: from mail-ob0-f178.google.com ([209.85.214.178]:43272 "EHLO mail-ob0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751213Ab3DZWBj (ORCPT ); Fri, 26 Apr 2013 18:01:39 -0400 MIME-Version: 1.0 In-Reply-To: References: <1367003005-5560-1-git-send-email-keescook@chromium.org> <1367003005-5560-6-git-send-email-keescook@chromium.org> Date: Fri, 26 Apr 2013 15:01:38 -0700 X-Google-Sender-Auth: 9uKT-7JTJXr6GTAiyd6eTKhV7d8 Message-ID: Subject: Re: [PATCH 5/6] x86: kaslr: select memory region from e820 maps From: Kees Cook To: Yinghai Lu Cc: Linux Kernel Mailing List , "kernel-hardening@lists.openwall.com" , "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , "the arch/x86 maintainers" , Jarkko Sakkinen , Matthew Garrett , Matt Fleming , Eric Northup , Dan Rosenberg , Julien Tinnes , Will Drewry Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1772 Lines: 51 On Fri, Apr 26, 2013 at 2:51 PM, Yinghai Lu wrote: > On Fri, Apr 26, 2013 at 12:03 PM, Kees Cook wrote: >> This chooses the largest contiguous RAM region for the KASLR offset >> to live in. >> >> Signed-off-by: Kees Cook >> --- >> v2: >> - make sure to exclude e820 regions outside the 32-bit memory range. > > Do you need to execlude range that is used for initrd and possible > command_line and boot_param ? Yeah, and while doing a stress test here, I realized there's another problem. In the original version of this, the stack and heap are set up after relocation. In the C port, they're set up before, so there's even more to avoid. To illustrate... here's a CONFIG_RELOCATABLE=n boot: LOAD_PHYS:0x0000000001000000 input: 0x0000000001dfe24d-0x00000000023db865 output: 0x0000000001000000-0x00000000023c98c0 heap: 0x00000000023e0740-0x00000000023e8740 stack: 0x00000000023ec698 chosen: 0x0000000001000000 (stack is just cheating and reporting sp in decompress_kernel) And a CONFIG_RELOCATABLE=y and "noaslr" boot: LOAD_PHYS:0x0000000001000000 input: 0x000000000108b25e-0x00000000016b3e96 output: 0x0000000000200000-0x00000000016a1db8 heap: 0x00000000016b9600-0x00000000016c1600 stack: 0x00000000016c5558 chosen: 0x0000000000200000 In that case, it's just so far under LOAD_PHYSICAL_START that it's safe. But if KASLR picks an area overlapping input, heap, or stack it's hosed. :) -Kees -- Kees Cook Chrome OS Security -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/