lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 21 Feb 2008 10:52:37 +0100
From:	Sam Ravnborg <sam@...nborg.org>
To:	"Huang, Ying" <ying.huang@...el.com>
Cc:	Ingo Molnar <mingo@...hat.com>, "H. Peter Anvin" <hpa@...or.com>,
	Thomas Gleixner <tglx@...utronix.de>, Andi Kleen <ak@...e.de>,
	Ian Campbell <ijc@...lion.org.uk>,
	Matt Mackall <mpm@...enic.com>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] x86 : add init BSS sections

Hi Huang.

A few comments..

> Init BSS sections are added for uninitialized init DATA sections to
> reduce kernel image size.

- If this is relevant for more than just x86 then the definition
  of the section should be in include/asm-generic/vmlinux.lds.h

- Please add a comment along the definitions in the .lds file
  explaning the use of the section.
- Same goes for init.h

- Is this concept restricted to __init or is it
  relevant for __devinit etc (I hope we can avoid that)

- Can we do any kind of build time check to catch
  accidental misuse?

	Sam



> 
> Signed-off-by: Huang Ying <ying.huang@...el.com>
> 
> ---
>  arch/x86/kernel/head64.c         |    2 ++
>  arch/x86/kernel/head_32.S        |    5 +++++
>  arch/x86/kernel/vmlinux_32.lds.S |    9 +++++++--
>  arch/x86/kernel/vmlinux_64.lds.S |   24 ++++++++++++++----------
>  include/asm-generic/sections.h   |    1 +
>  include/linux/init.h             |    1 +
>  6 files changed, 30 insertions(+), 12 deletions(-)
> 
> --- a/arch/x86/kernel/vmlinux_32.lds.S
> +++ b/arch/x86/kernel/vmlinux_32.lds.S
> @@ -189,10 +189,15 @@ SECTIONS
>  	__per_cpu_end = .;
>    }
>    . = ALIGN(PAGE_SIZE);
Do we really need to aling this to PAGE_SIZE - I
assume we free everything in one go - or?

> -  /* freed after init ends here */
>  
>    .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
> -	__init_end = .;
> +	__init_bss_start = .;
> +	*(.bss.init.page_aligned)
I do not see this section used anywhere. At least init.h does not
define it.


> +	*(.bss.init)
> +	. = ALIGN(4);
> +	__init_bss_stop = .;
> +	. = ALIGN(PAGE_SIZE);

Why do we have these two ALIGN() following each other?
The latter should be enough.

> +	__init_end = .;			/* freed after init ends here */
>  	__bss_start = .;		/* BSS */
>  	*(.bss.page_aligned)
>  	*(.bss)
> --- a/arch/x86/kernel/vmlinux_64.lds.S
> +++ b/arch/x86/kernel/vmlinux_64.lds.S
> @@ -150,6 +150,12 @@ SECTIONS
>    . = ALIGN(PAGE_SIZE);
>    __smp_alt_end = .;
>  
> +  . = ALIGN(PAGE_SIZE);
> +  __nosave_begin = .;
> +  .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
> +  . = ALIGN(PAGE_SIZE);
> +  __nosave_end = .;
> +
This change looks unrelated - it is not in the changelog.
Or is it just diff that fools me?

>    . = ALIGN(PAGE_SIZE);		/* Init code and data */
>    __init_begin = .;
>    .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
> @@ -219,17 +225,15 @@ SECTIONS
>  
>    PERCPU(PAGE_SIZE)
>  
> -  . = ALIGN(PAGE_SIZE);
> -  __init_end = .;
> -
> -  . = ALIGN(PAGE_SIZE);
> -  __nosave_begin = .;
> -  .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
> -  . = ALIGN(PAGE_SIZE);
> -  __nosave_end = .;
> -
> -  __bss_start = .;		/* BSS */
> +  . = ALIGN(PAGE_SIZE);		/* BSS */
>    .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
> +	__init_bss_start = .;
> +	*(.bss.init.page_aligned)
> +	*(.bss.init)
> +	__init_bss_stop = .;
> +	. = ALIGN(PAGE_SIZE);
> +	__init_end = .;
> +	__bss_start = .;
>  	*(.bss.page_aligned)
>  	*(.bss)
>  	}
> --- a/arch/x86/kernel/head_32.S
> +++ b/arch/x86/kernel/head_32.S
> @@ -105,6 +105,11 @@ ENTRY(startup_32)
>   */
>  	cld
>  	xorl %eax,%eax
> +	movl $pa(__init_bss_start),%edi
> +	movl $pa(__init_bss_stop), %ecx
> +	subl %edi,%ecx
> +	shrl $2,%ecx
> +	rep ; stosl
>  	movl $pa(__bss_start),%edi
>  	movl $pa(__bss_stop),%ecx
>  	subl %edi,%ecx

How about introducing head32.c and do this in a similar
way that 64 bit does?
Then we could later move more stuff to said file.


	Sam
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists