All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Chao Fan <fanc.fnst@cn.fujitsu.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	"Lendacky, Thomas" <thomas.lendacky@amd.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	caoj.fnst@cn.fujitsu.com, Juergen Gross <jgross@suse.com>,
	Ingo Molnar <mingo@kernel.org>, Kees Cook <keescook@chromium.org>,
	the arch/x86 maintainers <x86@kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	linux-tip-commits@vger.kernel.org,
	Matt Fleming <matt@codeblueprint.co.uk>
Subject: Re: [tip:x86/boot] x86/boot: Early parse RSDP and save it in boot_params
Date: Mon, 11 Feb 2019 12:20:09 +0100	[thread overview]
Message-ID: <20190211112009.GE19618@zn.tnic> (raw)
In-Reply-To: <CAKv+Gu9mm-w66ZZrd7WhuD3_iELS5vUJ0-1DtRq1GDjSsDNEVg@mail.gmail.com>

On Mon, Feb 11, 2019 at 10:46:18AM +0000, Ard Biesheuvel wrote:
> As I pointed out in my previous reply, systab will be the wrong type
> on 32-bit firmware, it needs to be efi_system_table_32_t

This seems to work. Chao, please run it too.

Thx.

---
diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
index c5a949335d8b..0d97aa8bd01f 100644
--- a/arch/x86/boot/compressed/acpi.c
+++ b/arch/x86/boot/compressed/acpi.c
@@ -50,7 +50,8 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 	acpi_physical_address rsdp_addr = 0;
 
 #ifdef CONFIG_EFI
-	efi_system_table_t *systab;
+	unsigned long systab, systab_tables, config_tables;
+	unsigned int nr_tables;
 	struct efi_info *ei;
 	bool efi_64;
 	int size, i;
@@ -70,13 +71,13 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 
 	/* Get systab from boot params. */
 #ifdef CONFIG_X86_64
-	systab = (efi_system_table_t *)(ei->efi_systab | ((__u64)ei->efi_systab_hi<<32));
+	systab = ei->efi_systab | ((__u64)ei->efi_systab_hi << 32);
 #else
 	if (ei->efi_systab_hi || ei->efi_memmap_hi) {
 		debug_putstr("Error getting RSDP address: EFI system table located above 4GB.\n");
 		return 0;
 	}
-	systab = (efi_system_table_t *)ei->efi_systab;
+	systab = ei->efi_systab;
 #endif
 	if (!systab)
 		error("EFI system table not found.");
@@ -87,16 +88,30 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 	size = efi_64 ? sizeof(efi_config_table_64_t) :
 			sizeof(efi_config_table_32_t);
 
-	for (i = 0; i < systab->nr_tables; i++) {
+	if (efi_64) {
+		efi_system_table_64_t *st_tbl = (efi_system_table_64_t *)systab;
+
+		config_tables	= st_tbl->tables;
+		nr_tables	= st_tbl->nr_tables;
+	} else {
+		efi_system_table_32_t *st_tbl = (efi_system_table_32_t *)systab;
+
+		config_tables	= st_tbl->tables;
+		nr_tables	= st_tbl->nr_tables;
+	}
+
+	if (!config_tables)
+		error("EFI config tables not found.");
+
+	for (i = 0; i < nr_tables; i++) {
 		acpi_physical_address table;
-		void *config_tables;
 		efi_guid_t guid;
 
-		config_tables = (void *)(systab->tables + size * i);
+		config_tables += size * i;
+
 		if (efi_64) {
-			efi_config_table_64_t *tmp_table;
+			efi_config_table_64_t *tmp_table = (efi_config_table_64_t *)config_tables;
 
-			tmp_table = config_tables;
 			guid = tmp_table->guid;
 			table = tmp_table->table;
 
@@ -105,9 +120,8 @@ static acpi_physical_address efi_get_rsdp_addr(void)
 				return 0;
 			}
 		} else {
-			efi_config_table_32_t *tmp_table;
+			efi_config_table_32_t *tmp_table = (efi_config_table_32_t *)config_tables;
 
-			tmp_table = config_tables;
 			guid = tmp_table->guid;
 			table = tmp_table->table;
 		}

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

  parent reply	other threads:[~2019-02-11 11:20 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-23 11:08 [PATCH v16 0/7] Parse ACPI table and limit KASLR to choosing immovable memory Chao Fan
2019-01-23 11:08 ` [PATCH v16 1/7] x86/boot: Copy kstrtoull() to boot/string.c instead of simple_strtoull() Chao Fan
2019-02-01 10:58   ` [tip:x86/boot] x86/boot: Copy kstrtoull() to boot/string.c tip-bot for Chao Fan
2019-01-23 11:08 ` [PATCH v16 2/7] x86/boot: Introduce get_acpi_rsdp() to parse RSDP in cmdline from KEXEC Chao Fan
2019-02-01 10:59   ` [tip:x86/boot] x86/boot: Add "acpi_rsdp=" early parsing tip-bot for Chao Fan
2019-01-23 11:08 ` [PATCH v16 3/7] x86/boot: Introduce efi_get_rsdp_addr() to find RSDP from EFI table Chao Fan
2019-02-01 10:59   ` [tip:x86/boot] x86/boot: Search for RSDP in the EFI tables tip-bot for Chao Fan
2019-01-23 11:08 ` [PATCH v16 4/7] x86/boot: Introduce bios_get_rsdp_addr() to search RSDP in memory Chao Fan
2019-02-01 11:00   ` [tip:x86/boot] x86/boot: Search for " tip-bot for Chao Fan
2019-01-23 11:08 ` [PATCH v16 5/7] x86/boot: Early parse RSDP and fill in boot_params Chao Fan
2019-01-23 11:17   ` Chao Fan
2019-02-01 11:01   ` [tip:x86/boot] x86/boot: Early parse RSDP and save it " tip-bot for Chao Fan
2019-02-08 19:02     ` Guenter Roeck
2019-02-08 19:10       ` Borislav Petkov
2019-02-08 20:44         ` Guenter Roeck
2019-02-08 21:53           ` Borislav Petkov
2019-02-11  0:22             ` Borislav Petkov
2019-02-11  1:33               ` Chao Fan
2019-02-11  9:46               ` Ard Biesheuvel
2019-02-11  9:55                 ` Chao Fan
2019-02-11  9:57                   ` Ard Biesheuvel
2019-02-11 10:10                     ` Chao Fan
2019-02-11 10:17                       ` Ard Biesheuvel
2019-02-11 10:24                         ` Borislav Petkov
2019-02-11 10:33                           ` Ard Biesheuvel
2019-02-11 10:42                           ` Borislav Petkov
2019-02-11 10:46                             ` Ard Biesheuvel
2019-02-11 11:04                               ` Borislav Petkov
2019-02-11 11:55                                 ` Ard Biesheuvel
2019-02-11 12:16                                   ` Borislav Petkov
2019-02-11 11:20                               ` Borislav Petkov [this message]
2019-02-11 13:21                                 ` Chao Fan
2019-02-13  1:54                                 ` Chao Fan
2019-02-13  7:36                                   ` Boris Petkov
2019-02-13  7:58                                     ` Chao Fan
2019-02-13  8:01                                       ` Ard Biesheuvel
2019-02-13  8:12                                         ` Chao Fan
2019-02-13  8:50                                           ` Borislav Petkov
2019-02-13  8:57                                             ` Chao Fan
2019-02-11  1:07         ` Chao Fan
2019-02-11  9:30       ` Chao Fan
2019-02-11 10:08         ` Borislav Petkov
2019-02-11 13:03           ` Chao Fan
2019-02-11 14:08           ` Guenter Roeck
2019-02-13  9:06       ` [tip:x86/boot] x86/boot: Correct RSDP parsing with 32-bit EFI tip-bot for Borislav Petkov
2019-02-13 11:27       ` tip-bot for Borislav Petkov
2019-01-23 11:08 ` [PATCH v16 6/7] x86/boot: Parse SRAT address from RSDP and store immovable memory Chao Fan
2019-02-01 11:01   ` [tip:x86/boot] x86/boot: Parse SRAT table and count immovable memory regions tip-bot for Chao Fan
2019-01-23 11:08 ` [PATCH v16 7/7] x86/boot/KASLR: Limit KASLR to extracting kernel in immovable memory Chao Fan
2019-02-01 11:02   ` [tip:x86/boot] x86/boot/KASLR: Limit KASLR to extract the kernel in immovable memory only tip-bot for Chao Fan
2019-01-28 17:51 ` [PATCH v16 0/7] Parse ACPI table and limit KASLR to choosing immovable memory Borislav Petkov
2019-01-30  5:58   ` Chao Fan
2019-01-30 11:22     ` [PATCH] x86/boot: Build the command line parsing code unconditionally (was: Re: [PATCH v16 0/7] Parse ACPI table and limit KASLR to choosing immovable memory) Borislav Petkov
2019-02-01 10:57       ` [tip:x86/boot] x86/boot: Build the command line parsing code unconditionally tip-bot for Borislav Petkov

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=20190211112009.GE19618@zn.tnic \
    --to=bp@alien8.de \
    --cc=ard.biesheuvel@linaro.org \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=fanc.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=jgross@suse.com \
    --cc=keescook@chromium.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=matt@codeblueprint.co.uk \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.org \
    --cc=yamada.masahiro@socionext.com \
    /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.