All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jürgen Groß" <jgross@suse.com>
To: Sergey Dyasli <sergey.dyasli@citrix.com>
Cc: xen-devel@lists.xen.org, kasan-dev@googlegroups.com,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Alexander Potapenko <glider@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	George Dunlap <george.dunlap@citrix.com>,
	Ross Lagerwall <ross.lagerwall@citrix.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v1 1/4] kasan: introduce set_pmd_early_shadow()
Date: Wed, 15 Jan 2020 12:09:50 +0100	[thread overview]
Message-ID: <6f643816-a7dc-f3bb-d521-b6ac104918d6@suse.com> (raw)
In-Reply-To: <96c2414e-91fb-5a28-44bc-e30d2daabec5@citrix.com>

On 15.01.20 11:54, Sergey Dyasli wrote:
> Hi Juergen,
> 
> On 08/01/2020 15:20, Sergey Dyasli wrote:
>> It is incorrect to call pmd_populate_kernel() multiple times for the
>> same page table. Xen notices it during kasan_populate_early_shadow():
>>
>>      (XEN) mm.c:3222:d155v0 mfn 3704b already pinned
>>
>> This happens for kasan_early_shadow_pte when USE_SPLIT_PTE_PTLOCKS is
>> enabled. Fix this by introducing set_pmd_early_shadow() which calls
>> pmd_populate_kernel() only once and uses set_pmd() afterwards.
>>
>> Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
> 
> Looks like the plan to use set_pmd() directly has failed: it's an
> arch-specific function and can't be used in arch-independent code
> (as kbuild test robot has proven).
> 
> Do you see any way out of this other than disabling SPLIT_PTE_PTLOCKS
> for PV KASAN?

Change set_pmd_early_shadow() like the following:

#ifdef CONFIG_XEN_PV
static inline void set_pmd_early_shadow(pmd_t *pmd, pte_t *early_shadow)
{
	static bool pmd_populated = false;

	if (likely(pmd_populated)) {
		set_pmd(pmd, __pmd(__pa(early_shadow) | _PAGE_TABLE));
	} else {
		pmd_populate_kernel(&init_mm, pmd, early_shadow);
		pmd_populated = true;
	}
}
#else
static inline void set_pmd_early_shadow(pmd_t *pmd, pte_t *early_shadow)
{
	pmd_populate_kernel(&init_mm, pmd, early_shadow);
}
#endif

... and move it to include/xen/xen-ops.h and call it with
lm_alias(kasan_early_shadow_pte) as the second parameter.


Juergen

WARNING: multiple messages have this Message-ID (diff)
From: "Jürgen Groß" <jgross@suse.com>
To: Sergey Dyasli <sergey.dyasli@citrix.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Ross Lagerwall <ross.lagerwall@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com,
	xen-devel@lists.xen.org, linux-mm@kvack.org,
	Alexander Potapenko <glider@google.com>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Dmitry Vyukov <dvyukov@google.com>
Subject: Re: [Xen-devel] [PATCH v1 1/4] kasan: introduce set_pmd_early_shadow()
Date: Wed, 15 Jan 2020 12:09:50 +0100	[thread overview]
Message-ID: <6f643816-a7dc-f3bb-d521-b6ac104918d6@suse.com> (raw)
In-Reply-To: <96c2414e-91fb-5a28-44bc-e30d2daabec5@citrix.com>

On 15.01.20 11:54, Sergey Dyasli wrote:
> Hi Juergen,
> 
> On 08/01/2020 15:20, Sergey Dyasli wrote:
>> It is incorrect to call pmd_populate_kernel() multiple times for the
>> same page table. Xen notices it during kasan_populate_early_shadow():
>>
>>      (XEN) mm.c:3222:d155v0 mfn 3704b already pinned
>>
>> This happens for kasan_early_shadow_pte when USE_SPLIT_PTE_PTLOCKS is
>> enabled. Fix this by introducing set_pmd_early_shadow() which calls
>> pmd_populate_kernel() only once and uses set_pmd() afterwards.
>>
>> Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
> 
> Looks like the plan to use set_pmd() directly has failed: it's an
> arch-specific function and can't be used in arch-independent code
> (as kbuild test robot has proven).
> 
> Do you see any way out of this other than disabling SPLIT_PTE_PTLOCKS
> for PV KASAN?

Change set_pmd_early_shadow() like the following:

#ifdef CONFIG_XEN_PV
static inline void set_pmd_early_shadow(pmd_t *pmd, pte_t *early_shadow)
{
	static bool pmd_populated = false;

	if (likely(pmd_populated)) {
		set_pmd(pmd, __pmd(__pa(early_shadow) | _PAGE_TABLE));
	} else {
		pmd_populate_kernel(&init_mm, pmd, early_shadow);
		pmd_populated = true;
	}
}
#else
static inline void set_pmd_early_shadow(pmd_t *pmd, pte_t *early_shadow)
{
	pmd_populate_kernel(&init_mm, pmd, early_shadow);
}
#endif

... and move it to include/xen/xen-ops.h and call it with
lm_alias(kasan_early_shadow_pte) as the second parameter.


Juergen

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2020-01-15 11:09 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-08 15:20 [PATCH v1 0/4] basic KASAN support for Xen PV domains Sergey Dyasli
2020-01-08 15:20 ` [Xen-devel] " Sergey Dyasli
2020-01-08 15:20 ` [PATCH v1 1/4] kasan: introduce set_pmd_early_shadow() Sergey Dyasli
2020-01-08 15:20   ` [Xen-devel] " Sergey Dyasli
2020-01-10 14:41   ` kbuild test robot
2020-01-10 14:41     ` kbuild test robot
2020-01-10 14:41     ` [Xen-devel] " kbuild test robot
2020-01-11  5:21   ` kbuild test robot
2020-01-11  5:21     ` kbuild test robot
2020-01-11  5:21     ` [Xen-devel] " kbuild test robot
2020-01-15 10:54   ` Sergey Dyasli
2020-01-15 10:54     ` [Xen-devel] " Sergey Dyasli
2020-01-15 10:54     ` Sergey Dyasli
2020-01-15 11:09     ` Jürgen Groß [this message]
2020-01-15 11:09       ` [Xen-devel] " Jürgen Groß
2020-01-15 16:32       ` Sergey Dyasli
2020-01-15 16:32         ` [Xen-devel] " Sergey Dyasli
2020-01-15 16:32         ` Sergey Dyasli
2020-01-16  7:54         ` Jürgen Groß
2020-01-16  7:54           ` [Xen-devel] " Jürgen Groß
2020-01-08 15:20 ` [PATCH v1 2/4] x86/xen: add basic KASAN support for PV kernel Sergey Dyasli
2020-01-08 15:20   ` [Xen-devel] " Sergey Dyasli
2020-01-09  9:15   ` Jürgen Groß
2020-01-09  9:15     ` [Xen-devel] " Jürgen Groß
2020-01-10 11:07     ` Sergey Dyasli
2020-01-10 11:07       ` [Xen-devel] " Sergey Dyasli
2020-01-10 11:07       ` Sergey Dyasli
2020-01-09 23:27   ` Boris Ostrovsky
2020-01-09 23:27     ` [Xen-devel] " Boris Ostrovsky
2020-01-10 11:46     ` Sergey Dyasli
2020-01-10 11:46       ` [Xen-devel] " Sergey Dyasli
2020-01-10 11:46       ` Sergey Dyasli
2020-01-10 13:05   ` kbuild test robot
2020-01-10 13:05     ` kbuild test robot
2020-01-10 13:05     ` [Xen-devel] " kbuild test robot
2020-01-10 17:19   ` kbuild test robot
2020-01-10 17:19     ` kbuild test robot
2020-01-10 17:19     ` [Xen-devel] " kbuild test robot
2020-01-08 15:20 ` [PATCH v1 3/4] xen: teach KASAN about grant tables Sergey Dyasli
2020-01-08 15:20   ` [Xen-devel] " Sergey Dyasli
2020-01-08 15:21 ` [PATCH v1 4/4] xen/netback: Fix grant copy across page boundary with KASAN Sergey Dyasli
2020-01-08 15:21   ` [Xen-devel] " Sergey Dyasli
2020-01-09 10:33   ` Vlastimil Babka
2020-01-09 10:33     ` [Xen-devel] " Vlastimil Babka
2020-01-15 11:02     ` Sergey Dyasli
2020-01-15 11:02       ` [Xen-devel] " Sergey Dyasli
2020-01-15 11:02       ` Sergey Dyasli
2020-01-09 13:36   ` Paul Durrant
2020-01-09 13:36     ` [Xen-devel] " Paul Durrant
2020-01-09 13:36     ` Paul Durrant
2020-01-10 14:27     ` Sergey Dyasli
2020-01-10 14:27       ` [Xen-devel] " Sergey Dyasli
2020-01-10 14:27       ` Sergey Dyasli

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=6f643816-a7dc-f3bb-d521-b6ac104918d6@suse.com \
    --to=jgross@suse.com \
    --cc=akpm@linux-foundation.org \
    --cc=aryabinin@virtuozzo.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=dvyukov@google.com \
    --cc=george.dunlap@citrix.com \
    --cc=glider@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ross.lagerwall@citrix.com \
    --cc=sergey.dyasli@citrix.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xen.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.