Re: [PATCH 6/9] x86, pkeys: add pkey set/get syscalls
From: Dave Hansen <hidden>
Date: 2016-07-07 17:33:13
Also in:
linux-arch, linux-mm, lkml
On 07/07/2016 07:45 AM, Mel Gorman wrote:
On Thu, Jul 07, 2016 at 05:47:28AM -0700, Dave Hansen wrote:quoted
quoted
From: Dave Hansen <dave.hansen@linux.intel.com> This establishes two more system calls for protection key management: unsigned long pkey_get(int pkey); int pkey_set(int pkey, unsigned long access_rights); The return value from pkey_get() and the 'access_rights' passed to pkey_set() are the same format: a bitmask containing PKEY_DENY_WRITE and/or PKEY_DENY_ACCESS, or nothing set at all. These can replace userspace's direct use of the new rdpkru/wrpkru instructions.
...
This one feels like something that can or should be implemented in glibc.
I generally agree, except that glibc doesn't have any visibility into whether a pkey is currently valid or not.
There is no real enforcement of the values yet looking them up or setting them takes mmap_sem for write.
There are checks for mm_pkey_is_allocated(). That's the main thing these syscalls add on top of the raw instructions.
Applications that frequently get called will get hammed into the ground with serialisation on mmap_sem not to mention the cost of the syscall entry/exit.
I think we can do both of them without mmap_sem, as long as we resign ourselves to this just being fundamentally racy (which it is already, I think). But, is it worth performance-tuning things that we don't expect performance-sensitive apps to be using in the first place? They'll just use the RDPKRU/WRPKRU instructions directly. Ingo, do you still feel strongly that these syscalls (pkey_set/get()) should be included? Of the 5, they're definitely the two with the weakest justification.