All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@suse.de>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>, Jiri Kosina <jkosina@suse.cz>,
	Kees Cook <keescook@chromium.org>,
	Matt Fleming <matt.fleming@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linux-efi@vger.kernel.org" <linux-efi@vger.kernel.org>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: Re: [PATCH 1/8] x86, kaslr: get kaslr_enabled back correctly
Date: Mon, 2 Mar 2015 21:25:08 +0100	[thread overview]
Message-ID: <20150302202507.GD17532@pd.tnic> (raw)
In-Reply-To: <CAE9FiQV-xSqi-KqgafFL87epGobKmz6Ci_ood3ZtDSFPgSuG6Q@mail.gmail.com>

On Mon, Mar 02, 2015 at 10:58:23AM -0800, Yinghai Lu wrote:
> On Mon, Mar 2, 2015 at 6:53 AM, Borislav Petkov <bp@suse.de> wrote:
> > Well, it seems to work here but it still doesn't look reliable enough to
> > me. And this addon_zo thing of arbitrary 256K is strange.
> 
> Thanks for check that out.
> 
> That is not arbitrary number. Need to make that bigger than _end - _rodata
> 
> > objdump -t arch/x86/boot/compressed/vmlinux | grep \ _end
> 0000000000996000 g       .pgtable    0000000000000000 _end
> > objdump -t arch/x86/boot/compressed/vmlinux | grep \ _rodata
> 0000000000981780 g       .rodata    0000000000000000 _rodata
> 
> We only get that size after arch/x86/boot/compressed/vmlinux
> 
> but need number during building kernel vmlinux.
> 
> other way would be just increase init_size in arch/x86/boot/header.S
> instead of put it BRK area.

Ok, I'll take a look at this more tomorrow, on a clear head, but why
can't we make a special, explicit section which is not touched by
the early decompression and relocation code and which we can use for
setup_data only?

IOW, something like that although that doesn't work yet:

---
diff --git a/arch/x86/boot/compressed/aslr.c b/arch/x86/boot/compressed/aslr.c
index 7083c16cccba..01d5ddf1d22f 100644
--- a/arch/x86/boot/compressed/aslr.c
+++ b/arch/x86/boot/compressed/aslr.c
@@ -14,12 +14,12 @@
 static const char build_str[] = UTS_RELEASE " (" LINUX_COMPILE_BY "@"
 		LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION;
 
-struct kaslr_setup_data {
-	__u64 next;
-	__u32 type;
-	__u32 len;
-	__u8 data[1];
-} kaslr_setup_data;
+extern char _setup_data[];
+struct setup_data __attribute__((section (".setup_data"))) ksd = {
+	.type	= SETUP_KASLR,
+	.len	= 1,
+	.next	= 0,
+};
 
 #define I8254_PORT_CONTROL	0x43
 #define I8254_PORT_COUNTER0	0x40
@@ -306,10 +306,7 @@ static void add_kaslr_setup_data(struct boot_params *params, __u8 enabled)
 {
 	struct setup_data *data;
 
-	kaslr_setup_data.type = SETUP_KASLR;
-	kaslr_setup_data.len = 1;
-	kaslr_setup_data.next = 0;
-	kaslr_setup_data.data[0] = enabled;
+	ksd.data[0] = enabled;
 
 	data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
 
@@ -317,10 +314,9 @@ static void add_kaslr_setup_data(struct boot_params *params, __u8 enabled)
 		data = (struct setup_data *)(unsigned long)data->next;
 
 	if (data)
-		data->next = (unsigned long)&kaslr_setup_data;
+		data->next = (unsigned long)&ksd;
 	else
-		params->hdr.setup_data = (unsigned long)&kaslr_setup_data;
-
+		params->hdr.setup_data = (unsigned long)&ksd;
 }
 
 unsigned char *choose_kernel_location(struct boot_params *params,
diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S
index 34d047c98284..26d62f4b27b9 100644
--- a/arch/x86/boot/compressed/vmlinux.lds.S
+++ b/arch/x86/boot/compressed/vmlinux.lds.S
@@ -29,6 +29,10 @@ SECTIONS
 	.rodata..compressed : {
 		*(.rodata..compressed)
 	}
+	.setup_data : {
+		_setup_data = . ;
+		*(.setup_data)
+	}
 	.text :	{
 		_text = .; 	/* Text */
 		*(.text)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 98dc9317286e..0978c61f84bd 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -429,7 +429,11 @@ static void __init reserve_initrd(void)
 
 static void __init parse_kaslr_setup(u64 pa_data, u32 data_len)
 {
-	kaslr_enabled = (bool)(pa_data + sizeof(struct setup_data));
+	struct setup_data *kdata;
+
+	kdata = early_memremap(pa_data, data_len);
+	kaslr_enabled = kdata->data[0];
+	early_iounmap(kdata, data_len);
 }
 
 static void __init parse_setup_data(void)

-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--

  reply	other threads:[~2015-03-02 20:25 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-01  2:17 [PATCH 0/8] x86, boot: clean up setup_data handling Yinghai Lu
2015-03-01  2:17 ` Yinghai Lu
2015-03-01  2:17 ` [PATCH 1/8] x86, kaslr: get kaslr_enabled back correctly Yinghai Lu
     [not found]   ` <1425176259-30087-2-git-send-email-yinghai-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2015-03-01  2:40     ` Yinghai Lu
2015-03-01  2:40       ` Yinghai Lu
2015-03-01  9:45       ` Borislav Petkov
2015-03-01 15:23         ` Ingo Molnar
2015-03-01 15:23           ` Ingo Molnar
2015-03-01 19:27           ` Yinghai Lu
2015-03-01 19:49             ` Borislav Petkov
     [not found]               ` <20150301194904.GC7748-fF5Pk5pvG8Y@public.gmane.org>
2015-03-01 20:24                 ` Yinghai Lu
2015-03-01 20:24                   ` Yinghai Lu
     [not found]                   ` <CAE9FiQVpWQ1NU5Euy2G4btS=94qKCZZ7T0YFsCR1x6iv4C1hjA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-01 20:29                     ` Borislav Petkov
2015-03-01 20:29                       ` Borislav Petkov
2015-03-01 20:41                       ` Yinghai Lu
     [not found]                         ` <CAE9FiQWqfpCg5reKP5TOv=8qJCLxqBDHCKAexH94avZ4b3=irQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02  8:56                           ` Borislav Petkov
2015-03-02  8:56                             ` Borislav Petkov
     [not found]                             ` <20150302085654.GA17532-fF5Pk5pvG8Y@public.gmane.org>
2015-03-02 11:04                               ` Yinghai Lu
2015-03-02 11:04                                 ` Yinghai Lu
2015-03-02 14:53                                 ` Borislav Petkov
2015-03-02 18:58                                   ` Yinghai Lu
2015-03-02 20:25                                     ` Borislav Petkov [this message]
     [not found]                                       ` <20150302202507.GD17532-fF5Pk5pvG8Y@public.gmane.org>
2015-03-02 22:10                                         ` Yinghai Lu
2015-03-02 22:10                                           ` Yinghai Lu
2015-03-01 19:39           ` Borislav Petkov
2015-03-02 13:13     ` Matt Fleming
2015-03-02 13:13       ` Matt Fleming
2015-03-02  9:39   ` Jiri Kosina
2015-03-01  2:17 ` [PATCH 2/8] x86: Kill E820_RESERVED_KERN Yinghai Lu
2015-03-01  2:17 ` [PATCH 3/8] x86, efi: copy SETUP_EFI data and access directly Yinghai Lu
2015-03-01  2:17 ` [PATCH 4/8] x86, of: let add_dtb reserve by itself Yinghai Lu
2015-03-01  2:17 ` [PATCH 5/8] x86, boot: Add add_pci handler for SETUP_PCI Yinghai Lu
     [not found] ` <1425176259-30087-1-git-send-email-yinghai-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2015-03-01  2:17   ` [PATCH 6/8] x86: kill not used setup_data handling code Yinghai Lu
2015-03-01  2:17     ` Yinghai Lu
2015-03-01  2:17 ` [PATCH 7/8] x86, pci: convert SETUP_PCI data to list Yinghai Lu
2015-03-01  2:17 ` [PATCH 8/8] x86, pci: export SETUP_PCI data via sysfs Yinghai Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150302202507.GD17532@pd.tnic \
    --to=bp@suse.de \
    --cc=bhelgaas@google.com \
    --cc=hpa@zytor.com \
    --cc=jkosina@suse.cz \
    --cc=keescook@chromium.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=matt.fleming@intel.com \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.