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:	Tue, 18 Nov 2014 09:56:35 -0800
From:	Yinghai Lu <yinghai@...nel.org>
To:	Thomas Gleixner <tglx@...utronix.de>,
	Ingo Molnar <mingo@...nel.org>,
	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
	Kees Cook <keescook@...omium.org>,
	David Vrabel <david.vrabel@...rix.com>,
	Yinghai Lu <yinghai@...nel.org>,
	Toshi Kani <toshi.kani@...com>, Wang Nan <wangnan0@...wei.com>,
	Yasuaki Ishimatsu <isimatu.yasuaki@...fujitsu.com>,
	"H. Peter Anvin" <hpa@...or.com>,
	Andy Lutomirski <luto@...capital.net>
Cc:	"linux-tip-commits@...r.kernel.org" 
	<linux-tip-commits@...r.kernel.org>
Subject: Re: [tip:x86/urgent] x86, mm: Set NX across entire PMD at boot

On Tue, Nov 18, 2014 at 9:40 AM, tip-bot for Kees Cook <tipbot@...or.com> wrote:
> Commit-ID:  45e2a9d4701d8c624d4a4bcdd1084eae31e92f58
> Gitweb:     http://git.kernel.org/tip/45e2a9d4701d8c624d4a4bcdd1084eae31e92f58
> Author:     Kees Cook <keescook@...omium.org>
> AuthorDate: Fri, 14 Nov 2014 11:47:37 -0800
> Committer:  Thomas Gleixner <tglx@...utronix.de>
> CommitDate: Tue, 18 Nov 2014 18:32:24 +0100
>
> x86, mm: Set NX across entire PMD at boot
>
> When setting up permissions on kernel memory at boot, the end of the
> PMD that was split from bss remained executable. It should be NX like
> the rest. This performs a PMD alignment instead of a PAGE alignment to
> get the correct span of memory.
>
> Before:
> ---[ High Kernel Mapping ]---
> ...
> 0xffffffff8202d000-0xffffffff82200000  1868K     RW       GLB NX pte
> 0xffffffff82200000-0xffffffff82c00000    10M     RW   PSE GLB NX pmd
> 0xffffffff82c00000-0xffffffff82df5000  2004K     RW       GLB NX pte
> 0xffffffff82df5000-0xffffffff82e00000    44K     RW       GLB x  pte
> 0xffffffff82e00000-0xffffffffc0000000   978M                     pmd
>
> After:
> ---[ High Kernel Mapping ]---
> ...
> 0xffffffff8202d000-0xffffffff82200000  1868K     RW       GLB NX pte
> 0xffffffff82200000-0xffffffff82e00000    12M     RW   PSE GLB NX pmd
> 0xffffffff82e00000-0xffffffffc0000000   978M                     pmd
>
> [ tglx: Changed it to roundup(_brk_end, PMD_SIZE) and added a comment.
>         We really should unmap the reminder along with the holes
>         caused by init,initdata etc. but thats a different issue ]
>
> Signed-off-by: Kees Cook <keescook@...omium.org>
> Cc: Andy Lutomirski <luto@...capital.net>
> Cc: Toshi Kani <toshi.kani@...com>
> Cc: Yasuaki Ishimatsu <isimatu.yasuaki@...fujitsu.com>
> Cc: David Vrabel <david.vrabel@...rix.com>
> Cc: Wang Nan <wangnan0@...wei.com>
> Cc: Yinghai Lu <yinghai@...nel.org>
> Cc: stable@...r.kernel.org
> Link: http://lkml.kernel.org/r/20141114194737.GA3091@www.outflux.net
> Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
> ---
>  arch/x86/mm/init_64.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index 4cb8763..4e5dfec 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -1123,7 +1123,7 @@ void mark_rodata_ro(void)
>         unsigned long end = (unsigned long) &__end_rodata_hpage_align;
>         unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
>         unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
> -       unsigned long all_end = PFN_ALIGN(&_end);
> +       unsigned long all_end;
>
>         printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
>                (end - start) >> 10);
> @@ -1134,7 +1134,16 @@ void mark_rodata_ro(void)
>         /*
>          * The rodata/data/bss/brk section (but not the kernel text!)
>          * should also be not-executable.
> +        *
> +        * We align all_end to PMD_SIZE because the existing mapping
> +        * is a full PMD. If we would align _brk_end to PAGE_SIZE we
> +        * split the PMD and the reminder between _brk_end and the end
> +        * of the PMD will remain mapped executable.
> +        *
> +        * Any PMD which was setup after the one which covers _brk_end
> +        * has been zapped already via cleanup_highmem().

should be cleanup_highmap()

>          */
> +       all_end = roundup((unsigned long)_brk_end, PMD_SIZE);

Why do you need cast here ?

>         set_memory_nx(rodata_start, (all_end - rodata_start) >> PAGE_SHIFT);
>
>         rodata_test();
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ