All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave@sr71.net>
To: Jonathan Corbet <corbet@lwn.net>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
	linux-api@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-mm@kvack.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, dave.hansen@linux.intel.com
Subject: Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls
Date: Wed, 1 Jun 2016 12:32:58 -0700	[thread overview]
Message-ID: <574F386A.8070106@sr71.net> (raw)
In-Reply-To: <20160601123705.72a606e7@lwn.net>

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@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Dave Hansen <dave@sr71.net>
To: Jonathan Corbet <corbet@lwn.net>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
	linux-api@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-mm@kvack.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, dave.hansen@linux.intel.com
Subject: Re: [PATCH 5/8] x86, pkeys: allocation/free syscalls
Date: Wed, 1 Jun 2016 12:32:58 -0700	[thread overview]
Message-ID: <574F386A.8070106@sr71.net> (raw)
Message-ID: <20160601193258.tGQQuB2ArFNRiTNf-6HpH4JJviIpPFlW3mRwExRaWz8@z> (raw)
In-Reply-To: <20160601123705.72a606e7@lwn.net>

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.

  reply	other threads:[~2016-06-01 19:32 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-31 15:28 [PATCH 0/8] System Calls for Memory Protection Keys Dave Hansen
2016-05-31 15:28 ` Dave Hansen
2016-05-31 15:28 ` Dave Hansen
2016-05-31 15:28 ` [PATCH 1/8] x86, pkeys: add fault handling for PF_PK page fault bit Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-05-31 15:28 ` [PATCH 2/8] mm: implement new pkey_mprotect() system call Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-05-31 15:28 ` [PATCH 3/8] x86, pkeys: make mprotect_key() mask off additional vm_flags Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-05-31 15:28 ` [PATCH 4/8] x86: wire up mprotect_key() system call Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-05-31 15:28 ` [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen
2016-05-31 15:28   ` Dave Hansen
     [not found]   ` <20160531152822.FE8D405E-LXbPSdftPKxrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2016-06-01 18:37     ` Jonathan Corbet
2016-06-01 18:37       ` Jonathan Corbet
2016-06-01 18:37       ` Jonathan Corbet
2016-06-01 19:32       ` Dave Hansen [this message]
2016-06-01 19:32         ` Dave Hansen
     [not found]         ` <574F386A.8070106-gkUM19QKKo4@public.gmane.org>
2016-06-02  0:11           ` Michael Kerrisk (man-pages)
2016-06-02  0:11             ` Michael Kerrisk (man-pages)
2016-06-02  0:11             ` Michael Kerrisk (man-pages)
2016-06-02  0:17             ` Dave Hansen
2016-06-02  0:17               ` Dave Hansen
     [not found]               ` <574F7B16.4080906-gkUM19QKKo4@public.gmane.org>
2016-06-03  0:26                 ` Michael Kerrisk (man-pages)
2016-06-03  0:26                   ` Michael Kerrisk (man-pages)
2016-06-03  0:26                   ` Michael Kerrisk (man-pages)
2016-06-03 17:28                   ` Dave Hansen
2016-06-03 17:28                     ` Dave Hansen
2016-06-03 19:27                     ` Michael Kerrisk (man-pages)
2016-06-03 19:27                       ` Michael Kerrisk (man-pages)
2016-06-01 20:48   ` Arnd Bergmann
2016-06-01 20:48     ` Arnd Bergmann
2016-06-02 21:10     ` Dave Hansen
2016-06-02 21:10       ` Dave Hansen
2016-05-31 15:28 ` [PATCH 6/8] x86, pkeys: add pkey set/get syscalls Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-05-31 15:28 ` [PATCH 7/8] pkeys: add details of system call use to Documentation/ Dave Hansen
2016-05-31 15:28   ` Dave Hansen
2016-06-01 16:43   ` Jonathan Corbet
2016-06-01 16:43     ` Jonathan Corbet
2016-06-01 16:46     ` Dave Hansen
2016-06-01 16:46       ` Dave Hansen
     [not found]       ` <574F114F.8010701-gkUM19QKKo4@public.gmane.org>
2016-06-01 16:49         ` Jonathan Corbet
2016-06-01 16:49           ` Jonathan Corbet
2016-06-01 16:49           ` Jonathan Corbet
2016-06-01 17:10           ` Dave Hansen
2016-06-01 17:10             ` Dave Hansen
2016-05-31 15:28 ` [PATCH 8/8] x86, pkeys: add self-tests Dave Hansen
2016-05-31 15:28   ` Dave Hansen
  -- strict thread matches above, loose matches on Subject: below --
2016-04-11 15:54 [PATCH 0/8] System Calls for Memory Protection Keys Dave Hansen
2016-04-11 15:54 ` [PATCH 5/8] x86, pkeys: allocation/free syscalls Dave Hansen
2016-04-11 15:54   ` Dave Hansen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=574F386A.8070106@sr71.net \
    --to=dave@sr71.net \
    --cc=akpm@linux-foundation.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.