Messages in this thread | | | Subject | Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls | From | Dave Hansen <> | Date | Wed, 1 Jun 2016 12:32:58 -0700 |
| |
On 06/01/2016 11:37 AM, Jonathan Corbet wrote: >> +static inline >> +int mm_pkey_free(struct mm_struct *mm, int pkey) >> +{ >> + /* >> + * pkey 0 is special, always allocated and can never >> + * be freed. >> + */ >> + if (!pkey || !validate_pkey(pkey)) >> + return -EINVAL; >> + if (!mm_pkey_is_allocated(mm, pkey)) >> + return -EINVAL; >> + >> + mm_set_pkey_free(mm, pkey); >> + >> + return 0; >> +} > > If I read this right, it doesn't actually remove any pkey restrictions > that may have been applied while the key was allocated. So there could be > pages with that key assigned that might do surprising things if the key is > reallocated for another use later, right? Is that how the API is intended > to work?
Yeah, that's how it works.
It's not ideal. It would be _best_ if we during mm_pkey_free(), we ensured that no VMAs under that mm have that vma_pkey() set. But, that search would be potentially expensive (a walk over all VMAs), or would force us to keep a data structure with a count of all the VMAs with a given key.
I should probably discuss this behavior in the manpages and address it more directly in the changelog for this patch.
| |