From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>,
Andy Lutomirski <luto@amacapital.net>
Cc: "security@kernel.org" <security@kernel.org>,
Peter Zijlstra <peterz@infradead.org>, X86 ML <x86@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
xen-devel <xen-devel@lists.xen.org>,
Borislav Petkov <bp@alien8.de>, Jan Beulich <jbeulich@suse.com>,
Sasha Levin <sasha.levin@oracle.com>,
David Vrabel <david.vrabel@citrix.com>,
Konrad Wilk <konrad.wilk@oracle.com>
Subject: Re: [Xen-devel] [PATCH v4 0/3] x86: modify_ldt improvement, test, and config option
Date: Wed, 29 Jul 2015 17:23:29 -0400 [thread overview]
Message-ID: <55B94451.8040600@oracle.com> (raw)
In-Reply-To: <55B9236B.9090507@citrix.com>
On 07/29/2015 03:03 PM, Andrew Cooper wrote:
> On 29/07/15 15:43, Boris Ostrovsky wrote:
>> FYI, I have got a repro now and am investigating.
> Good and bad news. This bug has nothing to do with LDTs themselves.
>
> I have worked out what is going on, but this:
>
> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> index 5abeaac..7e1a82e 100644
> --- a/arch/x86/xen/enlighten.c
> +++ b/arch/x86/xen/enlighten.c
> @@ -493,6 +493,7 @@ static void set_aliased_prot(void *v, pgprot_t prot)
>
> pte = pfn_pte(pfn, prot);
>
> + (void)*(volatile int*)v;
> if (HYPERVISOR_update_va_mapping((unsigned long)v, pte, 0)) {
> pr_err("set_aliased_prot va update failed w/ lazy mode
> %u\n", paravirt_get_lazy_mode());
> BUG();
>
> Is perhaps not the fix we are looking for, and every use of
> HYPERVISOR_update_va_mapping() is susceptible to the same problem.
I think in most cases we know that page is mapped so hopefully this is
the only site that we need to be careful about.
>
> The update_va_mapping hypercall is designed to emulate writing the pte
> for v, with auditing applied. As part of this, it does a pagewalk on v
> to locate and map the l1. During this walk, Xen it finds the l2 not
> present, and fails the hypercall. i.e. v is not reachable from the
> current cr3.
>
> Reading the virtual address immediately before issuing the hypercall
> causes Linux's memory faulting logic to fault in the l2. This also
> explains why vm_unmap_aliases() appears to fix the issue; it is likely
> to fault in enough of the paging structure for v to be reachable.
We've just touched this page (in write_ldt()) in this test so why would
it not be mapped?
>
> One solution might be to use MMU_NORMAL_PT_UPDATE hypercall instead,
> which take the physical address of pte to update. This won't fail in
> Xen if part of the paging structure is missing, and can be batched.
Yes, it does work. Thanks Andrew.
-boris
next prev parent reply other threads:[~2015-07-29 21:25 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-25 5:36 [PATCH v4 0/3] x86: modify_ldt improvement, test, and config option Andy Lutomirski
2015-07-25 5:36 ` [PATCH v4 1/3] x86/ldt: Make modify_ldt synchronous Andy Lutomirski
2015-07-25 9:03 ` Borislav Petkov
2015-07-25 9:03 ` Borislav Petkov
2015-07-25 5:36 ` Andy Lutomirski
2015-07-25 5:36 ` [PATCH v4 2/3] x86/ldt: Make modify_ldt optional Andy Lutomirski
2015-07-25 5:36 ` Andy Lutomirski
2015-07-25 6:23 ` Willy Tarreau
2015-07-25 6:44 ` Andy Lutomirski
2015-07-25 6:44 ` Andy Lutomirski
2015-07-25 7:50 ` Willy Tarreau
2015-07-25 7:50 ` Willy Tarreau
2015-07-25 13:03 ` [PATCH 4/3] x86/ldt: allow to disable modify_ldt at runtime Willy Tarreau
2015-07-25 13:03 ` Willy Tarreau
2015-07-25 16:08 ` Andy Lutomirski
2015-07-25 16:08 ` Andy Lutomirski
2015-07-25 16:33 ` Willy Tarreau
2015-07-25 16:33 ` Willy Tarreau
2015-07-25 17:42 ` Andy Lutomirski
2015-07-25 17:42 ` Andy Lutomirski
2015-07-25 18:45 ` Willy Tarreau
2015-07-25 18:45 ` Willy Tarreau
2015-07-27 19:04 ` Kees Cook
2015-07-27 21:37 ` Willy Tarreau
2015-07-27 21:37 ` Willy Tarreau
2015-07-27 19:04 ` Kees Cook
2015-07-25 6:23 ` [PATCH v4 2/3] x86/ldt: Make modify_ldt optional Willy Tarreau
2015-07-25 9:15 ` Borislav Petkov
2015-07-25 16:03 ` Andy Lutomirski
2015-07-25 16:03 ` Andy Lutomirski
2015-07-25 16:35 ` Willy Tarreau
2015-07-25 16:35 ` Willy Tarreau
2015-07-25 9:15 ` Borislav Petkov
2015-07-25 5:36 ` [PATCH v4 3/3] selftests/x86, x86/ldt: Add a selftest for modify_ldt Andy Lutomirski
2015-07-27 15:52 ` [PATCH v4.1 3.3] " Andy Lutomirski
2015-07-27 15:52 ` Andy Lutomirski
2015-07-25 5:36 ` [PATCH v4 3/3] " Andy Lutomirski
2015-07-25 6:27 ` [PATCH v4 0/3] x86: modify_ldt improvement, test, and config option Willy Tarreau
2015-07-25 6:27 ` Willy Tarreau
2015-07-27 15:36 ` Boris Ostrovsky
2015-07-27 15:36 ` Boris Ostrovsky
2015-07-27 15:53 ` Andy Lutomirski
2015-07-27 16:18 ` Boris Ostrovsky
2015-07-27 16:18 ` Boris Ostrovsky
2015-07-28 2:20 ` Andy Lutomirski
2015-07-28 3:16 ` Andy Lutomirski
2015-07-28 3:23 ` Andy Lutomirski
2015-07-28 3:23 ` Andy Lutomirski
2015-07-28 3:43 ` Boris Ostrovsky
2015-07-28 3:43 ` Boris Ostrovsky
2015-07-28 10:29 ` Andrew Cooper
2015-07-28 10:29 ` Andrew Cooper
2015-07-28 14:05 ` Boris Ostrovsky
2015-07-28 14:35 ` Andrew Cooper
2015-07-28 14:50 ` Boris Ostrovsky
2015-07-28 14:50 ` Boris Ostrovsky
2015-07-28 15:15 ` Konrad Rzeszutek Wilk
2015-07-28 15:39 ` Boris Ostrovsky
2015-07-28 15:39 ` Boris Ostrovsky
2015-07-28 15:15 ` Konrad Rzeszutek Wilk
2015-07-28 15:23 ` Andrew Cooper
2015-07-28 15:23 ` Andrew Cooper
2015-07-28 15:59 ` Boris Ostrovsky
2015-07-28 15:59 ` [Xen-devel] " Boris Ostrovsky
2015-07-28 14:35 ` Andrew Cooper
2015-07-28 14:05 ` Boris Ostrovsky
2015-07-28 15:43 ` Andy Lutomirski
2015-07-28 15:43 ` Andy Lutomirski
2015-07-28 16:30 ` Andrew Cooper
2015-07-28 17:07 ` Andy Lutomirski
2015-07-28 17:10 ` Boris Ostrovsky
2015-07-28 17:10 ` [Xen-devel] " Boris Ostrovsky
2015-07-29 0:21 ` Andy Lutomirski
2015-07-29 0:47 ` Andrew Cooper
2015-07-29 0:47 ` [Xen-devel] " Andrew Cooper
2015-07-29 3:01 ` Boris Ostrovsky
2015-07-29 4:26 ` Andy Lutomirski
2015-07-29 4:26 ` [Xen-devel] " Andy Lutomirski
2015-07-29 5:28 ` Andy Lutomirski
2015-07-29 5:28 ` [Xen-devel] " Andy Lutomirski
2015-07-29 14:21 ` Andrew Cooper
2015-07-29 14:21 ` [Xen-devel] " Andrew Cooper
2015-07-29 14:43 ` Boris Ostrovsky
2015-07-29 14:43 ` [Xen-devel] " Boris Ostrovsky
2015-07-29 19:03 ` Andrew Cooper
2015-07-29 19:03 ` [Xen-devel] " Andrew Cooper
2015-07-29 21:23 ` Boris Ostrovsky
2015-07-29 21:23 ` Boris Ostrovsky [this message]
2015-07-29 21:26 ` [Xen-devel] " Andy Lutomirski
2015-07-29 21:33 ` Boris Ostrovsky
2015-07-29 21:33 ` Boris Ostrovsky
2015-07-29 21:37 ` [Xen-devel] " Andrew Cooper
2015-07-29 22:05 ` Andy Lutomirski
2015-07-29 22:11 ` Andrew Cooper
2015-07-29 22:11 ` [Xen-devel] " Andrew Cooper
2015-07-29 22:40 ` Boris Ostrovsky
2015-07-29 22:40 ` Boris Ostrovsky
2015-07-29 22:46 ` [Xen-devel] " David Vrabel
2015-07-29 22:46 ` David Vrabel
2015-07-29 22:49 ` Boris Ostrovsky
2015-07-29 22:49 ` [Xen-devel] " Boris Ostrovsky
2015-07-29 22:55 ` David Vrabel
2015-07-29 22:55 ` [Xen-devel] " David Vrabel
2015-07-29 23:02 ` Andrew Cooper
2015-07-29 23:13 ` Andy Lutomirski
2015-07-30 0:29 ` Andrew Cooper
2015-07-30 0:29 ` [Xen-devel] " Andrew Cooper
2015-07-30 18:30 ` Andy Lutomirski
2015-07-30 18:54 ` Andrew Cooper
2015-07-30 18:54 ` [Xen-devel] " Andrew Cooper
2015-07-30 20:01 ` Boris Ostrovsky
2015-07-30 20:05 ` Andy Lutomirski
2015-07-30 20:05 ` [Xen-devel] " Andy Lutomirski
2015-07-30 20:18 ` Boris Ostrovsky
2015-07-30 20:18 ` Boris Ostrovsky
2015-07-30 20:01 ` Boris Ostrovsky
2015-07-30 18:30 ` Andy Lutomirski
2015-07-29 23:13 ` Andy Lutomirski
2015-07-29 23:02 ` Andrew Cooper
2015-07-29 22:05 ` Andy Lutomirski
2015-07-29 21:37 ` Andrew Cooper
2015-07-29 21:26 ` Andy Lutomirski
2015-07-29 3:01 ` Boris Ostrovsky
2015-07-29 0:21 ` Andy Lutomirski
2015-07-28 17:07 ` Andy Lutomirski
2015-07-28 16:30 ` Andrew Cooper
2015-07-28 3:16 ` Andy Lutomirski
2015-07-28 2:20 ` Andy Lutomirski
2015-07-27 15:53 ` Andy Lutomirski
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=55B94451.8040600@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=david.vrabel@citrix.com \
--cc=jbeulich@suse.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sasha.levin@oracle.com \
--cc=security@kernel.org \
--cc=x86@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.