From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
paulus@samba.org, mpe@ellerman.id.au, ryabinin.a.a@gmail.com
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [RFC PATCH V1 0/8] KASAN ppc64 support
Date: Mon, 17 Aug 2015 15:20:14 +0530 [thread overview]
Message-ID: <87mvxqp7l5.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <1439794492.2416.8.camel@kernel.crashing.org>
Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> On Mon, 2015-08-17 at 12:06 +0530, Aneesh Kumar K.V wrote:
>> Hi,
>>
>> This patchset implements kernel address sanitizer for ppc64.
>> Since ppc64 virtual address range is divided into different regions,
>> we can't have one contigous area for the kasan shadow range. Hence
>> we don't support the INLINE kasan instrumentation. With Outline
>> instrumentation, we override the shadow_to_mem and mem_to_shadow
>> callbacks, so that we map only the kernel linear range (ie,
>> region with ID 0xc). For region with ID 0xd and 0xf (vmalloc
>> and vmemmap ) we return the address of the zero page. This
>> works because kasan doesn't track both vmemmap and vmalloc address.
> So bear with me, I don't know anything about KASAN, but if you want a
> shadow, can't you just add a fixed offset to the address and thus
> effectively shadow each region independently while keeping the inline
> helpers ?
>
For kernel linear mapping, our address space looks like
0xc000000000000000 - 0xc0003fffffffffff (64TB)
We can't have virtual address(effective address) above that range
in 0xc region. Hence in-order to shadow the linear mapping, I am using
region 0xe. ie, the shadow mapping now looks like
0xc000000000000000 -> 0xe000000000000000
ie, shadow offset now is 0xc800000000000000
For inline instrumentation, we need to have a constant shadow offset. We
can't use the same shadow offset for region 0xd and 0xf because, the
mapping would then end up as
vmalloc:
0xc800000000000000 + (0xd000000000000000ULL >> 3)
0xe200000000000000
vmemmap:
0xc800000000000000 + (0xf000000000000000ULL >> 3)
0xe600000000000000
and we can't have that logical address range, because our valid ranges
are
0xc000000000000000 - 0xc0003fffffffffff
0xd000000000000000 - 0xd0003fffffffffff
0xe000000000000000 - 0xe0003fffffffffff
0xf000000000000000 - 0xf0003fffffffffff
Because of the above I concluded that we may not be able to do
inline instrumentation. Now if we are not doing inline instrumentation,
we can simplify kasan support by not creating a shadow mapping at all
for vmalloc and vmemmap region. Hence the idea of returning the address
of a zero page for anything other than kernel linear map region.
Another reason why inline instrumentation is difficult is that for
inline instrumentation to work, we need to create a mapping for _possible_
virtual address space before kasan is fully initialized. ie, we need
to create page table entries for the shadow of the entire 64TB range,
with zero page, even though we have lesser ram. We definitely can't bolt
those entries. I am yet to get the shadow for kernel linear mapping to
work without bolting. Also we will have to get the page table allocated
for that, because we can't share page table entries. Our fault
path use pte entries for storing hash slot index.
NOTE:
If we are ok to steal part of that 64TB range, for kasan mapping , ie
we make shadow of each region part of the same region, may be we can
get inline instrumentation to work. But that still doesn't solve the
page table allocation overhead issue mentioned above.
-aneesh
next prev parent reply other threads:[~2015-08-17 9:51 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-17 6:36 [RFC PATCH V1 0/8] KASAN ppc64 support Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 1/8] powerpc/mm: Add virt_to_pfn and use this instead of opencoding Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 2/8] kasan: MODULE_VADDR is not available on all archs Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 3/8] kasan: Rename kasan_enabled to kasan_report_enabled Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 4/8] kasan: Don't use kasan shadow pointer in generic functions Aneesh Kumar K.V
2015-08-17 11:36 ` Andrey Ryabinin
2015-08-18 5:29 ` Aneesh Kumar K.V
2015-08-18 9:12 ` Andrey Ryabinin
2015-08-17 6:36 ` [RFC PATCH V1 5/8] kasan: Enable arch to hook into kasan callbacks Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 6/8] kasan: Allow arch to overrride kasan shadow offsets Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 7/8] powerpc/mm: kasan: Add kasan support for ppc64 Aneesh Kumar K.V
2015-08-17 12:13 ` Andrey Ryabinin
2015-08-17 12:17 ` Andrey Ryabinin
2015-08-18 5:36 ` Aneesh Kumar K.V
2015-08-18 8:40 ` Andrey Ryabinin
2015-08-18 5:34 ` Aneesh Kumar K.V
2015-08-17 6:36 ` [RFC PATCH V1 8/8] powerpc: Disable kasan for kernel/ and mm/ directory Aneesh Kumar K.V
2015-08-17 6:54 ` [RFC PATCH V1 0/8] KASAN ppc64 support Benjamin Herrenschmidt
2015-08-17 9:50 ` Aneesh Kumar K.V [this message]
2015-08-17 10:01 ` Benjamin Herrenschmidt
2015-08-17 10:50 ` Aneesh Kumar K.V
2015-08-17 11:21 ` Benjamin Herrenschmidt
2015-08-17 11:29 ` Andrey Ryabinin
2015-08-18 5:42 ` Aneesh Kumar K.V
2015-08-18 8:50 ` Andrey Ryabinin
2015-08-18 9:21 ` Aneesh Kumar K.V
2015-08-18 9:30 ` Andrey Ryabinin
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=87mvxqp7l5.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
--cc=ryabinin.a.a@gmail.com \
/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.