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