From: Igor Stoppa <igor.stoppa@gmail.com>
To: Dave Hansen <dave.hansen@intel.com>,
Matthew Wilcox <willy@infradead.org>
Cc: linux-security-module@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org,
kernel-hardening@lists.openwall.com,
Igor Stoppa <igor.stoppa@huawei.com>
Subject: Re: Correct way to access the physmap? - Was: Re: [PATCH 7/9] Pmalloc Rare Write: modify selected pools
Date: Fri, 4 May 2018 02:52:22 +0400 [thread overview]
Message-ID: <91ca0b5e-0719-7ebf-4e11-8b17f54251fe@gmail.com> (raw)
In-Reply-To: <ef116557-1fb1-780e-2480-3eef9052b609@intel.com>
On 04/05/18 01:55, Dave Hansen wrote:
> On 05/03/2018 02:52 PM, Igor Stoppa wrote:
>> At the end of the summit, we agreed that I would go through the physmap.
>
> Do you mean the kernel linear map?
Apparently I did mean it. It was confusing, because I couldn't find a
single place stating it explicitly, like you just did.
> That's just another name for the
> virtual address that you get back from page_to_virt():
>
> int *j = page_to_virt(vmalloc_to_page(i));
>
One reason why I was not sure is that also the linear mapping gets
protected, when I protect hte corresponding page in the vmap_area:
if i do:
int *i = vmalloc(sizeof(int));
int *j = page_to_virt(vmalloc_to_page(i));
*i = 1;
set_memory_ro(i, 1);
*j = 2;
I get an error, because also *j has become read only.
I was expecting to have to do the protection of the linear mapping in a
second phase.
It turns out that - at least on x86_64 - it's already in place.
But it invalidates what we agreed, which was based on the assumption
that the linear mapping was writable all the time.
I see two options:
1) continue to go through the linear mapping, unprotecting it for the
time it takes to make the write.
2) use the code I already wrote, which creates an additional, temporary
mapping in R/W mode at a random address.
I'd prefer 2) because it is already designed to make life harder for
someone trying to attack the data in the page: even if one manages to
take over a core and busy loop on it, option 2) will use a random
temporary address, that is harder to figure out.
Option 1) re-uses the linear mapping and therefore the attacker really
only needs to get lucky and, depending on the target, write over some
other data that was in the same page being unprotected, or overwrite the
same data being updated, after the update has taken place.
Is there any objection if I continue with options 2?
--
igor
next prev parent reply other threads:[~2018-05-03 22:52 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-23 12:54 [RFC PATCH v23 0/6] mm: security: write protection for dynamic data Igor Stoppa
2018-04-23 12:54 ` [PATCH 1/9] struct page: add field for vm_struct Igor Stoppa
2018-04-23 12:54 ` [PATCH 2/9] vmalloc: rename llist field in vmap_area Igor Stoppa
2018-04-23 12:54 ` [PATCH 3/9] Protectable Memory Igor Stoppa
2018-04-23 12:54 ` [PATCH 4/9] Documentation for Pmalloc Igor Stoppa
2018-04-23 12:54 ` [PATCH 5/9] Pmalloc selftest Igor Stoppa
2018-04-23 12:54 ` [PATCH 6/9] lkdtm: crash on overwriting protected pmalloc var Igor Stoppa
2018-04-23 12:54 ` [PATCH 7/9] Pmalloc Rare Write: modify selected pools Igor Stoppa
2018-04-24 11:50 ` Matthew Wilcox
2018-04-24 12:32 ` lazytyped
2018-04-24 12:39 ` Igor Stoppa
2018-04-24 14:44 ` Matthew Wilcox
2018-04-24 15:03 ` lazytyped
2018-04-24 15:29 ` Igor Stoppa
2018-04-25 20:58 ` Igor Stoppa
2018-04-24 12:33 ` Igor Stoppa
2018-04-24 17:04 ` Igor Stoppa
2018-05-03 21:52 ` Correct way to access the physmap? - Was: " Igor Stoppa
2018-05-03 21:55 ` Dave Hansen
2018-05-03 22:52 ` Igor Stoppa [this message]
2018-04-23 12:54 ` [PATCH 8/9] Preliminary self test for pmalloc rare write Igor Stoppa
2018-04-23 12:54 ` [PATCH 9/9] Protect SELinux initialized state with pmalloc Igor Stoppa
2018-04-24 5:58 ` kbuild test robot
2018-04-24 12:49 ` Stephen Smalley
2018-04-24 14:35 ` Igor Stoppa
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=91ca0b5e-0719-7ebf-4e11-8b17f54251fe@gmail.com \
--to=igor.stoppa@gmail.com \
--cc=dave.hansen@intel.com \
--cc=igor.stoppa@huawei.com \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-security-module@vger.kernel.org \
--cc=willy@infradead.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;
as well as URLs for NNTP newsgroup(s).