On Thu, Oct 1, 2015 at 1:39 PM, Kees Cook <keesc...@google.com> wrote: > On Thu, Oct 1, 2015 at 4:17 AM, Ingo Molnar <mi...@kernel.org> wrote: >> >> * Dave Hansen <d...@sr71.net> wrote: >> >>> > If yes then this could be a significant security feature / usecase for >>> > pkeys: > > Which CPUs (will) have pkeys? > >>> > executable sections of shared libraries and binaries could be mapped with >>> > pkey >>> > access disabled. If I read the Intel documentation correctly then that >>> > should >>> > be possible. >>> >>> Agreed. I've even heard from some researchers who are interested in this: >>> >>> https://www.infsec.cs.uni-saarland.de/wp-content/uploads/sites/2/2014/10/nuernberger2014ccs_disclosure.pdf >> >> So could we try to add an (opt-in) kernel option that enables this >> transparently >> and automatically for all PROT_EXEC && !PROT_WRITE mappings, without any >> user-space changes and syscalls necessary? > > I would like this very much. :) > >> Beyond the security improvement, this would enable this hardware feature on >> most >> x86 Linux distros automatically, on supported hardware, which is good for >> testing. >> >> Assuming it boots up fine on a typical distro, i.e. assuming that there are >> no >> surprises where PROT_READ && PROT_EXEC sections are accessed as data. > > I can't wait to find out what implicitly expects PROT_READ from > PROT_EXEC mappings. :)
There's one annoying issue at least: mprotect_pkey(..., PROT_READ | PROT_EXEC, 0) sets protection key 0. mprotect_pkey(..., PROT_EXEC, 0) maybe sets protection key 15 or whatever we use for this. What does mprotect_pkey(..., PROT_EXEC, 0) do? What if the caller actually wants key 0? What if some CPU vendor some day implements --x for real? Also, how do we do mprotect_pkey and say "don't change the key"? > > -Kees > > -- > Kees Cook > Chrome OS Security -- Andy Lutomirski AMA Capital Management, LLC -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/