public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
Cc: Dave Hansen <dave@sr71.net>,
	linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH 00/12] [RFC] x86: Memory Protection Keys
Date: Fri, 8 May 2015 06:51:17 +0200	[thread overview]
Message-ID: <20150508045117.GA24741@gmail.com> (raw)
In-Reply-To: <20150507211118.5f765fc6@lxorguk.ukuu.org.uk>


* One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk> wrote:

> On Thu, 7 May 2015 21:26:20 +0200
> Ingo Molnar <mingo@kernel.org> wrote:
> 
> > 
> > * One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk> wrote:
> > 
> > > > We could keep heap metadata as R/O and only make it R/W inside of 
> > > > malloc() itself to catch corruption more quickly.
> > > 
> > > If you implement multiple malloc pools you can chop up lots of 
> > > stuff.
> > 
> > I'd say that a 64-bit address space is large enough to hide 
> > buffers in from accidental corruption, without any runtime page 
> > protection flipping overhead?
> 
> I'd say no. [...]

So if putting your buffers anywhere in a byte range of 
18446744073709551616 bytes large (well, 281474976710656 bytes with 
current CPUs) isn't enough to protect from stray writes? Could you 
outline the situations where that isn't enough?

> [...] And from actual real world demand for PK the answer is also 
> no. It's already a problem with very large data sets. [...]

So that's why I asked: what real world demand is there? Is it 
described/documented/reported anywhere public?

> [...] Worse still in many cases its a problem that nobody is 
> actually measuring or doing much about (because mprotect on many 
> gigabytes of data is expensive).

It's not necessarily expensive if the remote TLB shootdown guarantee 
is weakened (i.e. we could have an mprotect() flag that says "I don't 
need remote TLB shootdowns") - and nobody has asked for that yet 
AFAICS.

With 2MB or 1GB pages it would be even cheaper.

Also, the way databases usually protect themselves is by making a 
robust central engine and communicating with (complex) DB users via 
memory sharing and IPC.

> > I think libraries are happy enough to work without bugs - apps 
> > digging around in library data are in a "you keep all the broken 
> > pieces" situation, why would a library want to slow down every 
> > good citizen down with extra protection flipping/unflipping 
> > accesses?
> 
> For debugging, when the library maintained data is sensitive or 
> something you don't want corupted, or because the user puts security 
> first. Protection keys are an awful lot faster than mprotect.

There's no flushing of TLBs involved even locally, a PK 'flip' is just 
a handful of cycles no matter whether protections are narrowed or 
broadened, right?

> [...] You've got no synchronization and shootdowns to do just a CPU 
> register to load to indicate which mask of keys you are happy with. 
> That really changes what it is useful for, because it's cheap. It 
> means you can happily do stuff like
> 
> 	while(data_blocks) {
> 		allow_key_and_source_access();
> 		do_crypto_func();
> 		revoke_key_and_source_access();
> 		do_network_io();  /* Can't accidentally leak keys or
> 					input */
> 	}

That looks useful if it's fast enough. I suspect a similar benefit 
could be gained if we allowed individually randomized anonymous 
mmap()s: the key wouldn't just be part of the heap, but isolated and 
randomized somewhere in a 64-bit (48-bit) address space.

Thanks,

	Ingo

  reply	other threads:[~2015-05-08  4:51 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-07 17:41 [PATCH 00/12] [RFC] x86: Memory Protection Keys Dave Hansen
2015-05-07 17:41 ` [PATCH 01/12] x86, pkeys: cpuid bit definition Dave Hansen
2015-05-07 17:41 ` [PATCH 02/12] x86, pku: define new CR4 bit Dave Hansen
2015-05-07 17:41 ` [PATCH 03/12] x86, pkey: pkru xsave fields and data structure Dave Hansen
2015-05-07 17:41 ` [PATCH 04/12] x86, pkeys: PTE bits Dave Hansen
2015-05-07 17:41 ` [PATCH 05/12] x86, pkeys: new page fault error code bit: PF_PK Dave Hansen
2015-05-07 17:41 ` [PATCH 06/12] x86, pkeys: store protection in high VMA flags Dave Hansen
2015-05-15 21:10   ` Thomas Gleixner
2015-05-15 21:13     ` Dave Hansen
2015-05-07 17:41 ` [PATCH 07/12] mm: Pass the 4-bit protection key in via PROT_ bits to syscalls Dave Hansen
2015-05-07 19:11   ` One Thousand Gnomes
2015-05-07 19:19     ` Dave Hansen
2015-09-04 20:13       ` Florian Weimer
2015-09-04 20:18         ` Dave Hansen
2015-09-04 20:34           ` Florian Weimer
2015-09-04 20:41             ` Dave Hansen
2015-05-07 17:41 ` [PATCH 08/12] x86, pkeys: arch-specific protection bits Dave Hansen
2015-05-07 17:41 ` [PATCH 10/12] x86, pkeys: differentiate Protection Key faults from normal Dave Hansen
2015-05-07 17:41 ` [PATCH 09/12] x86, pkeys: notify userspace about protection key faults Dave Hansen
2015-05-07 17:41 ` [PATCH 11/12] x86, pkeys: actually enable Memory Protection Keys in CPU Dave Hansen
2015-05-07 17:41 ` [PATCH 12/12] x86, pkeys: Documentation Dave Hansen
2015-05-07 17:57 ` [PATCH 00/12] [RFC] x86: Memory Protection Keys Ingo Molnar
2015-05-07 18:09   ` Dave Hansen
2015-05-07 18:48     ` Vlastimil Babka
2015-05-07 21:45       ` Dave Hansen
2015-05-09 19:09       ` Dr. David Alan Gilbert
2015-05-07 19:18     ` One Thousand Gnomes
2015-05-07 19:26       ` Ingo Molnar
2015-05-07 19:40         ` Dave Hansen
2015-05-07 20:11         ` One Thousand Gnomes
2015-05-08  4:51           ` Ingo Molnar [this message]
2015-05-08  6:09       ` Kevin Easton
2015-05-07 19:22     ` Christian Borntraeger
2015-05-07 19:29       ` Dave Hansen
2015-05-07 19:45         ` Christian Borntraeger
2015-05-07 19:49           ` Dave Hansen
2015-05-07 19:57             ` Christian Borntraeger

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=20150508045117.GA24741@gmail.com \
    --to=mingo@kernel.org \
    --cc=dave@sr71.net \
    --cc=gnomes@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox