Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160308114315.GA3869@osiris>
Date: Tue, 8 Mar 2016 12:43:15 +0100
From: Heiko Carstens <heiko.carstens@...ibm.com>
To: Christian Borntraeger <borntraeger@...ibm.com>
Cc: Kees Cook <keescook@...omium.org>,
        Martin Schwidefsky <schwidefsky@...ibm.com>,
        Ingo Molnar <mingo@...nel.org>, David Brown <david.brown@...aro.org>,
        Andy Lutomirski <luto@...capital.net>,
        "H. Peter Anvin" <hpa@...or.com>,
        Michael Ellerman <mpe@...erman.id.au>,
        Mathias Krause <minipli@...glemail.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        "x86@...nel.org" <x86@...nel.org>, Arnd Bergmann <arnd@...db.de>,
        PaX Team <pageexec@...email.hu>, Emese Revfy <re.emese@...il.com>,
        "kernel-hardening@...ts.openwall.com" <kernel-hardening@...ts.openwall.com>,
        LKML <linux-kernel@...r.kernel.org>,
        linux-arch <linux-arch@...r.kernel.org>,
        linux-s390 <linux-s390@...r.kernel.org>
Subject: Re: [RFC][PATCH] s390, postinit-readonly: implement post-init RO

On Tue, Mar 08, 2016 at 09:51:05AM +0100, Christian Borntraeger wrote:
> On 03/08/2016 01:41 AM, Kees Cook wrote:
> 
> >> --- a/arch/s390/kernel/vmlinux.lds.S
> >> +++ b/arch/s390/kernel/vmlinux.lds.S
> >> @@ -52,6 +52,12 @@ SECTIONS
> >>
> >>         RW_DATA_SECTION(0x100, PAGE_SIZE, THREAD_SIZE)
> >>
> >> +       . = ALIGN(PAGE_SIZE)
> 
> 
> missing ";" ?
> 
> 
> With that  and your fixes, this function claims to mark 0kB and 
> lkdtm can still write. Reason is that _edata is 0xc11008 and start is
> 0x0c11000.
> 
> making _edata page aligned as well, does now try to mark one page, but then
> we run into the next issue, that 
> 
> static void change_page_attr(unsigned long addr, int numpages,
>                              pte_t (*set) (pte_t))
> {
>         pte_t *ptep;
>         int i;
> 
>         for (i = 0; i < numpages; i++) {
>                 ptep = walk_page_table(addr);
> 
> triggers this
>                 if (WARN_ON_ONCE(!ptep))
>                         break;
> 
> because the kernel decided to map this with a large page. So we need
> to fix this function to then break the large page into a smaller chunk....

Yes... however that's a rather large change. I'll try to come up with a
patch that has less impact and implement the code that splits the kernel
mapping later.
Looking at our vmemmap code makes me realize that this code needs also to
be improved.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.