From: Mark Rutland <mark.rutland@arm.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Kees Cook <keescook@chromium.org>,
Hoeun Ryu <hoeun.ryu@gmail.com>,
"kernel-hardening@lists.openwall.com"
<kernel-hardening@lists.openwall.com>,
Andy Lutomirski <luto@kernel.org>,
PaX Team <pageexec@freemail.hu>, Emese Revfy <re.emese@gmail.com>,
Russell King <linux@armlinux.org.uk>,
"x86@kernel.org" <x86@kernel.org>
Subject: [kernel-hardening] Re: [RFC][PATCH 1/8] Introduce rare_write() infrastructure
Date: Thu, 2 Mar 2017 11:19:21 +0000 [thread overview]
Message-ID: <20170302111920.GB19632@leverpostej> (raw)
In-Reply-To: <CALCETrW21Hx1NiMSo7wu8o3c0TH4WUN_pMx20ZPH_AgwxKJRJw@mail.gmail.com>
On Wed, Mar 01, 2017 at 01:00:05PM -0800, Andy Lutomirski wrote:
> On Wed, Mar 1, 2017 at 12:13 PM, Kees Cook <keescook@chromium.org> wrote:
> > On Wed, Mar 1, 2017 at 2:43 AM, Mark Rutland <mark.rutland@arm.com> wrote:
> >> The RW alias write_write(var, val) approach only relies on what arches
> >> already have to implement for userspace to work, so if we can figure out
> >> how to make that work API-wise, we can probably implement that
> >> generically with switch_mm() and {get,put}_user().
> >
> > With a third mm? I maybe misunderstood what you meant about userspace...
>
> I think I'd like this series a lot better if the arch hooks were
> designed in such a way that a generic implementation could be backed
> by kmap, use_mm, or similar. This would *require* that the arch hooks
> be able to return a different address. Also, I see no reason that the
> list manipulation needs to be particularly special. If the arch hook
> sets up an alias, couldn't the generic code just call it twice.
I completely agree.
There's some fun to be had with switch_mm/use_mm (e.g. with arm64's
TTBR0_SW_PAN), but I think we can solve that generically.
> So here's a new proposal for how the hooks could look:
> void __arch_rare_write_begin(void);
> void __arch_rare_write(void *dest, const void *source, size_t len);
> void __arch_rare_write_end(void);
I think we're on the same page, API-wise.
Modulo naming, and the len argument to the write function, this is
exactly the same as my original proposal.
I had assumed that we could derive the len argument implicitly from the
object being assigned to, but it doesn't really matter either way.
> Now a generic implementation could work by allocating a percpu
> mm_struct that contains a single giant VMA. __arch_rare_write_begin()
> switches to that mm. __arch_rare_write pokes some PTEs into the mm
> and calls copy_to_user(). __arch_rare_write_end() switches back to
> the original mm. An x86 implementation could just fiddle with CR0.WP.
I'd expected that we'd know where the write_rarely data was up-front, so
we could set up the mapping statically, and just map it in at map/begin,
but otherwise this sounds like what I had in mind.
Thanks,
Mark.
next prev parent reply other threads:[~2017-03-02 11:19 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-27 20:42 [kernel-hardening] [RFC] Introduce rare_write() infrastructure Kees Cook
2017-02-27 20:42 ` [kernel-hardening] [RFC][PATCH 1/8] " Kees Cook
2017-02-28 8:22 ` [kernel-hardening] " Hoeun Ryu
2017-02-28 15:05 ` Kees Cook
2017-03-01 10:43 ` Mark Rutland
2017-03-01 20:13 ` Kees Cook
2017-03-01 20:31 ` Kees Cook
2017-03-01 21:00 ` Andy Lutomirski
2017-03-01 23:14 ` Kees Cook
2017-03-02 11:19 ` Mark Rutland [this message]
2017-03-02 16:33 ` Andy Lutomirski
2017-03-02 19:48 ` Kees Cook
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 2/8] lkdtm: add test for " Kees Cook
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 3/8] net: switch sock_diag handlers to rare_write() Kees Cook
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 4/8] x86: Implement __arch_rare_write_map/unmap() Kees Cook
2017-02-28 19:33 ` [kernel-hardening] " Andy Lutomirski
2017-02-28 21:35 ` Kees Cook
2017-02-28 22:54 ` Andy Lutomirski
2017-02-28 23:52 ` Kees Cook
2017-03-01 11:24 ` Mark Rutland
2017-03-01 20:25 ` Kees Cook
2017-03-02 11:20 ` Mark Rutland
2017-03-03 0:59 ` Hoeun Ryu
2017-03-01 10:59 ` Mark Rutland
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 5/8] ARM: " Kees Cook
2017-03-01 1:04 ` [kernel-hardening] " Russell King - ARM Linux
2017-03-01 5:41 ` Kees Cook
2017-03-01 11:30 ` Russell King - ARM Linux
2017-03-02 0:08 ` Kees Cook
2017-03-01 11:50 ` Mark Rutland
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 6/8] list: add rare_write() list helpers Kees Cook
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 7/8] gcc-plugins: Add constify plugin Kees Cook
2017-02-27 20:43 ` [kernel-hardening] [RFC][PATCH 8/8] cgroups: force all struct cftype const Kees Cook
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=20170302111920.GB19632@leverpostej \
--to=mark.rutland@arm.com \
--cc=hoeun.ryu@gmail.com \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux@armlinux.org.uk \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=pageexec@freemail.hu \
--cc=re.emese@gmail.com \
--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.