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. -- 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>