Messages in this thread | | | Subject | Re: [PATCH 26/26] x86, pkeys: Documentation | From | Dave Hansen <> | Date | Fri, 2 Oct 2015 10:50:36 -0700 |
| |
On 10/01/2015 11:23 PM, Ingo Molnar wrote: >> > Also, how do we do mprotect_pkey and say "don't change the key"? > So if we start managing keys as a resource (i.e. alloc/free up to 16 of them), and > provide APIs for user-space to do all that, then user-space is not supposed to > touch keys it has not allocated for itself - just like it's not supposed to write > to fds it has not opened.
I like that. It gives us at least a "soft" indicator to userspace about what keys it should or shouldn't be using.
> Such an allocation method can still 'mess up', and if the kernel allocates a key > for its purposes it should not assume that user-space cannot change it, but at > least for non-buggy code there's no interaction and it would work out fine.
Yeah. It also provides a clean interface so that future hardware could enforce enforce kernel "ownership" of a key which could protect against even buggy code.
So, we add a pair of syscalls,
unsigned long sys_alloc_pkey(unsigned long flags??) unsigned long sys_free_pkey(unsigned long pkey)
keep the metadata in the mm, and then make sure that userspace allocated it before it is allowed to do an mprotect_pkey() with it.
mprotect_pkey(add, flags, pkey) { if (!(mm->pkeys_allocated & (1 << pkey)) return -EINVAL; }
That should be pretty easy to implement. The only real overhead is the 16 bits we need to keep in the mm somewhere.
| |