All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: linux_dti@icloud.com
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	lcapitulino@redhat.com, keescook@chromium.org,
	tglx@linutronix.de, x86@kernel.org, hpa@zytor.com,
	fanc.fnst@cn.fujitsu.com, yasu.isimatu@gmail.com,
	indou.takao@jp.fujitsu.com, douly.fnst@cn.fujitsu.com
Subject: Re: [PATCH 1/2] x86/boot/KASLR: Add two functions for 1GB huge pages handling
Date: Thu, 17 May 2018 13:38:55 +0800	[thread overview]
Message-ID: <20180517053228.GM24627@MiWiFi-R3L-srv> (raw)
In-Reply-To: <20180517051225.GA2361@zrhn9910b>

On 05/17/18 at 07:12am, damian wrote:
> On Wed, 16. May 18:05, Baoquan He wrote:
> > Functions parse_gb_huge_pages() and process_gb_huge_page() are introduced to
> > handle conflict between KASLR and huge pages, will be used in the next patch.
> > 
> > Function parse_gb_huge_pages() is used to parse kernel command-line to get
> > how many 1GB huge pages have been specified. A static global variable
> > 'max_gb_huge_pages' is added to store the number.
> > 
> > And process_gb_huge_page() is used to skip as many 1GB huge pages as possible
> > from the passed in memory region according to the specified number.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> >  arch/x86/boot/compressed/kaslr.c | 71 ++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 71 insertions(+)
> > 
> > diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
> > index a0a50b91ecef..13bd879cdc5d 100644
> > --- a/arch/x86/boot/compressed/kaslr.c
> > +++ b/arch/x86/boot/compressed/kaslr.c
> > @@ -215,6 +215,32 @@ static void mem_avoid_memmap(char *str)
> >  		memmap_too_large = true;
> >  }
> >  
> > +/* Store the number of 1GB huge pages which user specified.*/
> > +static unsigned long max_gb_huge_pages;
> > +
> > +static int parse_gb_huge_pages(char *param, char* val)
> > +{
> > +	char *p;
> > +	u64 mem_size;
> > +	static bool gbpage_sz = false;
> > +
> > +	if (!strcmp(param, "hugepagesz")) {
> > +		p = val;
> > +		mem_size = memparse(p, &p);
> > +		if (mem_size == PUD_SIZE) {
> > +			if (gbpage_sz)
> > +				warn("Repeadly set hugeTLB page size of 1G!\n");
> > +			gbpage_sz = true;
> > +		} else
> > +			gbpage_sz = false;
> > +	} else if (!strcmp(param, "hugepages") && gbpage_sz) {
> > +		p = val;
> > +		max_gb_huge_pages = simple_strtoull(p, &p, 0);
> > +		debug_putaddr(max_gb_huge_pages);
> > +	}
> > +}
> Hello,
> 
> the return value is missing for the function or not ?

Thanks, very good catch. It should be 'static void ', no return value
since we didn't check it. Will update when repost.

> 
> > +
> > +
> >  static int handle_mem_memmap(void)
> >  {
> >  	char *args = (char *)get_cmd_line_ptr();
> > @@ -466,6 +492,51 @@ static void store_slot_info(struct mem_vector *region, unsigned long image_size)
> >  	}
> >  }
> >  
> > +/* Skip as many 1GB huge pages as possible in the passed region. */
> > +static void process_gb_huge_page(struct mem_vector *region, unsigned long image_size)
> > +{
> > +	int i = 0;
> > +	unsigned long addr, size;
> > +	struct mem_vector tmp;
> > +
> > +	if (!max_gb_huge_pages) {
> > +		store_slot_info(region, image_size);
> > +		return;
> > +	}
> > +
> > +	addr = ALIGN(region->start, PUD_SIZE);
> > +	/* If Did we raise the address above the passed in memory entry? */
> > +	if (addr < region->start + region->size)
> > +		size = region->size - (addr - region->start);
> > +
> > +	/* Check how many 1GB huge pages can be filtered out*/
> > +	while (size > PUD_SIZE && max_gb_huge_pages) {
> > +		size -= PUD_SIZE;
> > +		max_gb_huge_pages--;
> > +		i++;
> > +	}
> > +
> > +	if (!i) {
> > +		store_slot_info(region, image_size);
> > +		return;
> > +	}
> > +
> > +	/* Process the remaining regions after filtering out. */
> > +
> > +	if (addr >= region->start + image_size) {
> > +		tmp.start = region->start;
> > +		tmp.size = addr - region->start;
> > +		store_slot_info(&tmp, image_size);
> > +	}
> > +
> > +	size  = region->size - (addr - region->start) - i * PUD_SIZE;
> > +        if (size >= image_size) {
> > +		tmp.start = addr + i*PUD_SIZE;
> > +		tmp.size = size;
> > +		store_slot_info(&tmp, image_size);
> > +        }
> > +}
> > +
> >  static unsigned long slots_fetch_random(void)
> >  {
> >  	unsigned long slot;
> > -- 
> > 2.13.6
> > 

  reply	other threads:[~2018-05-17  5:39 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-16 10:05 [PATCH 0/2] x86/boot/KASLR: Skip specified number of 1GB huge pages when do physical randomization Baoquan He
2018-05-16 10:05 ` [PATCH 1/2] x86/boot/KASLR: Add two functions for 1GB huge pages handling Baoquan He
2018-05-17  3:27   ` Chao Fan
2018-05-17  4:03     ` Baoquan He
2018-05-17  5:53       ` Chao Fan
2018-05-17  6:13         ` Baoquan He
2018-05-17  5:12   ` damian
2018-05-17  5:38     ` Baoquan He [this message]
2018-06-21 15:01   ` Ingo Molnar
2018-06-22 12:14     ` Baoquan He
2018-06-24  7:13       ` Ingo Molnar
2018-05-16 10:05 ` [PATCH 2/2] x86/boot/KASLR: Skip specified number of 1GB huge pages when do physical randomization Baoquan He
2018-05-18  7:00 ` [PATCH 0/2] " Ingo Molnar
2018-05-18  7:43   ` Baoquan He
2018-05-18  8:19     ` Ingo Molnar
2018-05-18 11:28       ` Baoquan He
2018-05-18 12:14         ` Baoquan He
2018-05-23 19:10         ` Luiz Capitulino
2018-05-28  9:54           ` Baoquan He
2018-05-29 13:27             ` Luiz Capitulino

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=20180517053228.GM24627@MiWiFi-R3L-srv \
    --to=bhe@redhat.com \
    --cc=douly.fnst@cn.fujitsu.com \
    --cc=fanc.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=indou.takao@jp.fujitsu.com \
    --cc=keescook@chromium.org \
    --cc=lcapitulino@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux_dti@icloud.com \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yasu.isimatu@gmail.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.