linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chao Fan <fanc.fnst@cn.fujitsu.com>
To: <linux-kernel@vger.kernel.org>, <x86@kernel.org>,
	<linux-efi@vger.kernel.org>, <linux-acpi@vger.kernel.org>,
	<bp@alien8.de>, <tglx@linutronix.de>, <mingo@redhat.com>,
	<hpa@zytor.com>, <keescook@chromium.org>, <bhe@redhat.com>,
	<msys.mizuma@gmail.com>
Cc: <indou.takao@jp.fujitsu.com>, <caoj.fnst@cn.fujitsu.com>
Subject: Re: [PATCH v10 0/7] x86/boot/KASLR: Parse ACPI table and limit kaslr in immovable memory
Date: Wed, 31 Oct 2018 15:42:34 +0800	[thread overview]
Message-ID: <20181031074234.GB6609@localhost.localdomain> (raw)
In-Reply-To: <20181022093720.21426-1-fanc.fnst@cn.fujitsu.com>

Hi all,

Sorry for disturbance.
No reply to this version for more than one week,
any comments?

Thanks,
Chao Fan

On Mon, Oct 22, 2018 at 05:37:13PM +0800, Chao Fan wrote:
>***Background:
>People reported that kaslr may randomly chooses some positions
>which are located in movable memory regions. This will break memory
>hotplug feature and make the movable memory chosen by KASLR can't be
>removed.
>
>***Solutions:
>There should be a method to limit kaslr to choosing immovable memory
>regions, so there are 2 solutions:
>1) Add a kernel parameter to specify the memory regions.
>2) Get the information of memory hot-remove, then kaslr will know the
>   right regions.
>In method 2, information about memory hot-remove is in ACPI
>tables, which will be parsed after start_kernel(), kaslr can't get
>the information.
>In method 1, users should know the regions address and specify in
>kernel parameter.
>
>In the earliest time, I tried to dig ACPI tabls to solve this problem.
>But I didn't splite the code in 'compressed/' and ACPI code, so the patch
>is hard to follow so refused by community.
>Somebody suggest to add a kernel parameter to specify the
>immovable memory so that limit kaslr in these regions. Then I make
>a new patchset. After several versions, Ingo gave a suggestion:
>https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1634024.html
>Follow Ingo's suggestion, imitate the ACPI code to parse the acpi
>tables, so that the kaslr can get necessary memory information in
>ACPI tables.
>I think ACPI code is an independent part, so imitate the codes
>and functions to 'compressed/' directory, so that kaslr won't
>influence the initialization of ACPI.
>
>PATCH 1/7 Introduce cmdline_find_option_arg() to detect if option=arg
>          in cmdline
>PATCH 2/7 Copy kstrtoull() to compressed period, used to convert memory
>          address from string to unsigned long long.
>PATCH 3/7 Add efi_get_rsdp_addr() to dig out RSDP from EFI table when
>          booting from EFI.
>PATCH 4/7 Add bios_get_rsdp_addr() to search RSDP in memory when EFI
>          table not found.
>PATCH 5/7 Add get_acpi_rsdp() to parse RSDP in cmdline from kexec
>PATCH 6/7 Dig out SRAT table from RSDP and walk SRAT table to store
>          the immovable memory regions.
>PATCH 7/7 Calculate the intersection between memory regions from e820/efi
>          memory table and immovable memory regions. Limit KASLR choose
>          these regions for randomization.
>
>v1->v2:
> -  Simplify some code.
>Follow Baoquan He's suggestion:
> - Reuse the head file of acpi code.
>
>v2->v3:
> - Test in more conditions, so remove the 'RFC' tag.
> - Change some comments.
>
>v3->v4:
>Follow Thomas Gleixner's suggetsion:
> - Put the whole efi related function into #define CONFIG_EFI and return
>   false in the other stub.
>
>v4->v5:
>Follow Dou Liyang's suggestion:
> - Add more comments about some functions based on kernel code.
> - Change some typo in comments.
> - Clean useless variable.
> - Add check for the boundary of array.
> - Add check for 'movable_node' parameter
>
>v5->v6:
>Follow Baoquan He's suggestion:
> - Change some log.
> - Add the check for acpi_rsdp
> - Change some code logical to make code clear
>
>v6->v7:
>Follow Rafael's suggestion:
> - Add more comments and patch log.
>Follow test robot's suggestion:
> - Add "static" tag for function
>
>v7-v8:
>Follow Kees Cook's suggestion:
> - Use mem_overlaps() to check memory region.
> - Use #ifdef in the definition of function.
>
>v8-v9:
>Follow Boris' suggetion:
> - Change code style.
> - Splite PATCH 1/3 to more path.
> - Introduce some new function
> - Use existing function to rework some code
>Follow Masayoshi's suggetion:
> - Make code more readable
>
>v9->v10:
>Follow Baoquan's suggestion:
> - Change some log
> - Merge last two patch together.
>
>Any comments will be welcome.
>
>Chao Fan (7):
>  x86/boot: Introduce cmdline_find_option_arg()to detect if option=arg
>    in cmdline
>  x86/boot: Copy kstrtoull() to compressed period
>  x86/boot: Add efi_get_rsdp_addr() to dig out RSDP from EFI table
>  x86/boot: Add bios_get_rsdp_addr() to search RSDP in memory
>  x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdlien from kexec
>  x86/boot: Dig out SRAT table from RSDP and find immovable memory
>  x86/boot/KASLR: Limit kaslr to choosing the immovable memory
>
> arch/x86/boot/compressed/Makefile  |   4 +
> arch/x86/boot/compressed/acpitb.c  | 352 +++++++++++++++++++++++++++++
> arch/x86/boot/compressed/cmdline.c |  15 ++
> arch/x86/boot/compressed/kaslr.c   |  81 +++++--
> arch/x86/boot/compressed/misc.c    |  88 ++++++++
> arch/x86/boot/compressed/misc.h    |  20 ++
> 6 files changed, 545 insertions(+), 15 deletions(-)
> create mode 100644 arch/x86/boot/compressed/acpitb.c
>
>-- 
>2.17.2
>



  parent reply	other threads:[~2018-10-31  7:43 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-22  9:37 [PATCH v10 0/7] x86/boot/KASLR: Parse ACPI table and limit kaslr in immovable memory Chao Fan
2018-10-22  9:37 ` [PATCH v10 1/7] x86/boot: Introduce cmdline_find_option_arg()to detect if option=arg in cmdline Chao Fan
2018-11-06 12:22   ` Borislav Petkov
2018-11-07  1:24     ` Chao Fan
2018-10-22  9:37 ` [PATCH v10 2/7] x86/boot: Copy kstrtoull() to compressed period Chao Fan
2018-11-06 19:13   ` Borislav Petkov
2018-11-07  1:28     ` Chao Fan
2018-10-22  9:37 ` [PATCH v10 3/7] x86/boot: Add efi_get_rsdp_addr() to dig out RSDP from EFI table Chao Fan
2018-10-22  9:37 ` [PATCH v10 4/7] x86/boot: Add bios_get_rsdp_addr() to search RSDP in memory Chao Fan
2018-10-22  9:37 ` [PATCH v10 5/7] x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdline from kexec Chao Fan
2018-10-22  9:37 ` [PATCH v10 6/7] x86/boot: Dig out SRAT table from RSDP and find immovable memory Chao Fan
2018-10-22  9:37 ` [PATCH v10 7/7] x86/boot/KASLR: Limit kaslr to choosing the " Chao Fan
2018-10-31  7:42 ` Chao Fan [this message]
2018-10-31 10:05   ` [PATCH v10 0/7] x86/boot/KASLR: Parse ACPI table and limit kaslr in " Borislav Petkov
2018-11-01  1:25     ` Chao Fan

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=20181031074234.GB6609@localhost.localdomain \
    --to=fanc.fnst@cn.fujitsu.com \
    --cc=bhe@redhat.com \
    --cc=bp@alien8.de \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=indou.takao@jp.fujitsu.com \
    --cc=keescook@chromium.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=msys.mizuma@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).