On Thu, Oct 1, 2015 at 1:39 PM, Kees Cook <keescook@xxxxxxxxxx> wrote: > On Thu, Oct 1, 2015 at 4:17 AM, Ingo Molnar <mingo@xxxxxxxxxx> wrote: >> >> * Dave Hansen <dave@xxxxxxxx> 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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>