From: Aleksandar Markovic <Aleksandar.Markovic@mips.com>
To: James Hogan <jhogan@kernel.org>, Miodrag Dinic <Miodrag.Dinic@mips.com>
Cc: Paul Burton <Paul.Burton@mips.com>,
Maciej Rozycki <Maciej.Rozycki@mips.com>,
Aleksandar Markovic <aleksandar.markovic@rt-rk.com>,
David Daney <ddaney@caviumnetworks.com>,
"linux-mips@linux-mips.org" <linux-mips@linux-mips.org>,
Andrew Morton <akpm@linux-foundation.org>,
DengCheng Zhu <DengCheng.Zhu@mips.com>,
"Ding Tianhong" <dingtianhong@huawei.com>,
Douglas Leung <Douglas.Leung@mips.com>,
Frederic Weisbecker <frederic@kernel.org>,
Goran Ferenc <Goran.Ferenc@mips.com>,
Ingo Molnar <mingo@kernel.org>,
James Cowgill <James.Cowgill@imgtec.com>,
Jonathan Corbet <corbet@lwn.net>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Marc Zyngier <marc.zyngier@arm.com>,
Matt Redfearn <Matt.Redfearn@mips.com>,
Mimi Zohar <zohar@linux.vnet.ibm.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Petar Jovanovic <Petar.Jovanovic@mips.com>,
Raghu Gandham <Raghu.Gandham@mips.com>,
Ralf Baechle <ralf@linux-mips.org>,
Thomas Gleixner <tglx@linutronix.de>,
Tom Saeger <tom.saeger@oracle.com>
Subject: RE: [PATCH v2] MIPS: Add nonxstack=on|off kernel parameter
Date: Tue, 13 Feb 2018 16:06:22 +0000 [thread overview]
Message-ID: <BD3A5F1946F2E540A31AF2CE969BAEEE298ED6CE@MIPSMAIL01.mipstec.com> (raw)
In-Reply-To: <20180208115559.GA31316@saruman>
>
> ________________________________________
> From: James Hogan [jhogan@kernel.org]
> Sent: Thursday, February 8, 2018 12:55 PM
>
> Hi,
>
> On Thu, Dec 07, 2017 at 11:33:47AM +0000, Miodrag Dinic wrote:
> > > On Wed, Dec 06, 2017 at 05:50:52PM +0000, Maciej W. Rozycki wrote:
> > > > What problem are you trying to solve anyway? Is it not something that
> > > > can be handled with the `execstack' utility?
> > >
> > > The commit message states that for Android "non-exec stack is required".
> > > Is Android checking that then Aleksandar? If so, how?
> >
> > Android is using SELinux configured to disallow NX mappings by handling
> > the following sepolicy rules :
> > * Executable stack (execstack)
> > * Executable heap (execheap)
> > * File-based executable code which has been modified (execmod)
> > * All other executable memory (execmem)
>
> ...
>
> > The effect of not having some workaround like this in the kernel, would
> > be to run Android only in SELinux permissive mode.
>
> So you want to override the lack of RIXI so that SELinux sees an
> RX->RW->RX transition as execmod instead of execmem (since without RIXI
> its effectively RX->RWX->RX which is execmem)?
>
That is correct.
>
> Looking at file_map_prot_check(), it does the execmem check on this
> condition:
>
> if (default_noexec &&
> (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) ||
> (!shared && (prot & PROT_WRITE)))) {
> /*
> * We are making executable an anonymous mapping or a
> * private file mapping that will also be writable.
> * This has an additional check.
> */
>
> default_noexec is set if VM_DATA_DEFAULT_FLAGS doesn't have the exec
> flag set, and that flag depends on current->personality &
> READ_IMPLIES_EXEC, which depends on elf_read_implies_exec(), i.e.
> mips_elf_read_implies_exec(), and that should already return 1 if RIXI
> is unavailable.
>
> I.e.
>
> mips_elf_read_implies_exec() == 1
>
> elf_read_implies_exec() == 1
>
> READ_IMPLIES_EXEC will be set in current->personality
>
> VM_DATA_DEFAULT_FLAGS will have VM_EXEC set
>
> default_noexec will be set to 0 in selinux_init()
>
> none of the execmem, execheap, execstack, execmod permission
> checks should take place.
>
> So whats the problem exactly? Perhaps I misinterpreted something.
Thanks, James, for the analysis of this scenario! Hope the additional
info below will be useful for clarifying this matter.
-------------------
Let me rephrase the scenario (for configurations where cpu_has_rixi
equals to 0) that you described: (line numbers may be approximate)
1. mips_elf_read_implies_exec() will return 1
(arch/mips/kernel/elf.c:336)
2. elf_read_implies_exec() will return 1
(arch/mips/include/asm/elf.h:513)
3. READ_IMPLIES_EXEC will be set in current->personality
(fs/binfmt_elf_fdpic.c:357)
4. VM_DATA_DEFAULT_FLAGS will have VM_EXEC set
(while execiting selinux_init() in security/selinux/hooks.c:6644)
5. default_noexec will be set to 0 in selinux_init()
(security/selinux/hooks.c:6644)
6. none of the execmem, execstack permission checks should take place.
-------------------
However, in reality, these steps are not executed in this order, but in the following one:
4a. VM_DATA_DEFAULT_FLAGS will *NOT* have VM_EXEC set
(while execiting selinux_init() in security/selinux/hooks.c:6644)
5a. default_noexec will be set to *1* in selinux_init()
(security/selinux/hooks.c:6644)
1. mips_elf_read_implies_exec() will return 1
(arch/mips/kernel/elf.c:336)
2. elf_read_implies_exec() will return 1
(arch/mips/include/asm/elf.h:513)
3. READ_IMPLIES_EXEC will be set in current->personality
(fs/binfmt_elf_fdpic.c:357)
6a. both the execmem, execstack permission checks *do* take place.
------------------
The proposed change does affect the kernel in the sense that it indeed
hides the executable vulnerability of the system without RIXI support.
But we have made it unambiguous in the comments what are the
consequences of using this option.
------------------
Regards,
Aleksandar
>
> Cheers
> James
prev parent reply other threads:[~2018-02-13 16:14 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-21 13:56 Aleksandar Markovic
2017-11-21 16:50 ` Randy Dunlap
2017-11-21 20:53 ` David Daney
2017-11-30 9:34 ` Miodrag Dinic
2017-11-30 10:09 ` James Hogan
2017-11-30 13:06 ` Miodrag Dinic
2017-12-01 11:35 ` Miodrag Dinic
2017-12-01 17:38 ` David Daney
2017-12-06 17:50 ` Maciej W. Rozycki
2017-12-06 18:24 ` Paul Burton
2017-12-07 11:33 ` Miodrag Dinic
2018-01-02 18:35 ` Maciej W. Rozycki
2018-02-08 11:55 ` James Hogan
2018-02-13 16:06 ` Aleksandar Markovic [this message]
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=BD3A5F1946F2E540A31AF2CE969BAEEE298ED6CE@MIPSMAIL01.mipstec.com \
--to=aleksandar.markovic@mips.com \
--cc=DengCheng.Zhu@mips.com \
--cc=Douglas.Leung@mips.com \
--cc=Goran.Ferenc@mips.com \
--cc=James.Cowgill@imgtec.com \
--cc=Maciej.Rozycki@mips.com \
--cc=Matt.Redfearn@mips.com \
--cc=Miodrag.Dinic@mips.com \
--cc=Paul.Burton@mips.com \
--cc=Petar.Jovanovic@mips.com \
--cc=Raghu.Gandham@mips.com \
--cc=akpm@linux-foundation.org \
--cc=aleksandar.markovic@rt-rk.com \
--cc=corbet@lwn.net \
--cc=ddaney@caviumnetworks.com \
--cc=dingtianhong@huawei.com \
--cc=frederic@kernel.org \
--cc=jhogan@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=marc.zyngier@arm.com \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=ralf@linux-mips.org \
--cc=tglx@linutronix.de \
--cc=tom.saeger@oracle.com \
--cc=zohar@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®