All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tamas K Lengyel <tamas.lengyel@zentific.com>
To: Julien Grall <julien.grall@linaro.org>
Cc: Ian Campbell <ian.campbell@citrix.com>, Tim Deegan <tim@xen.org>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	Stefano Stabellini <stefano.stabellini@citrix.com>,
	Andres Lagar-Cavilla <andres@lagarcavilla.org>,
	Jan Beulich <jbeulich@suse.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>,
	Tamas K Lengyel <tklengyel@sec.in.tum.de>
Subject: Re: [PATCH for-4.5 v8 15/19] xen/arm: Data abort exception (R/W) mem_events.
Date: Wed, 24 Sep 2014 23:24:23 +0200	[thread overview]
Message-ID: <CAErYnsihS_2O0uVK0hv+9uJZZKuuNuSse6X6jE8+MLDQSLm-tA@mail.gmail.com> (raw)
In-Reply-To: <54232F23.50205@linaro.org>


[-- Attachment #1.1: Type: text/plain, Size: 3601 bytes --]

On Wed, Sep 24, 2014 at 10:52 PM, Julien Grall <julien.grall@linaro.org>
wrote:

> Hello Tamas,
>
> On 24/09/2014 18:13, Tamas K Lengyel wrote:
>
>>
>>
>> On Wed, Sep 24, 2014 at 6:51 PM, Julien Grall <julien.grall@linaro.org
>> <mailto:julien.grall@linaro.org>> wrote:
>>     >
>>     >     > +                 && hypercall_preempt_check() )
>>     >     > +            {
>>     >     > +                rc = progress;
>>     >     > +                goto out;
>>     >
>>     >     Jumping directly to the label "out" will skip flushing the TLB
>> for the
>>     >     domain. While it wasn't critical until now, partial redo during
>>     >     insertion/allocation or hypercall preemption only for
>> relinquish, the
>>     >     guest may use the wrong permission because the TLB hasn't been
>> flushed.
>>     >
>>     >     At the same time, it looks like you never request to flush for
>> the
>>     >     MEMACCESS operation (see *flush = true). Does memaccess does a
>> TLB flush
>>     >     somewhere else?
>>     >
>>     >
>>     > Yes, at the end of p2m_set_mem_access once all PTEs are updated
>>     > successfully. I guess we could flush the TLB as we are progressing
>> as
>>     > well, it wouldn't hurt.
>>
>>     We should flush the TLB as we are progressing because the guest may
>>     technically continue to run...
>>
>>
>> Hm, I think the guest is always paused while mem_access is being set via
>> memop but sure, it can't hurt.
>>
>
> I didn't find any domain pause call neither in the hypervisor nor in
> xen-access.
>
>
> Unless the pause is done by the hypervisor via the same hypercall, it's
> safer to flush the TLB if it's necessary.
>

Ack, and you are right, I don't know why I thought it was paused.


>
>      This case made me also think about another possible issue. Permission
>>     are checked in raw_copy_{from,to}_guest_helper during virtual address
>>     translation to a physical address.
>>
>>     As you modified the attribute in the P2M, the copy may failed because
>> of
>>     the lake of permission.
>>
>>
>> I'm not entire sure what you mean. Can you elaborate?
>>
>
> Xen has a bunch of functions raw_copy_{from,to}_guest helpers which copy
> data from/to the guest.
>
> Since XSA-98, Xen checks that the guest has effectively the right to
> read/write (depending of the helpers) a specific mapping before copying the
> data.
>

Ah yes I remember seeing that, it's passed through get_page_from_gva and
uses the MMU to do the translation directly.


>
> If the guest page doesn't have the good right, the helper will fail and
> therefore so do the hypercall.
>
> When memaccess is used, a RAM page may have its permission lower down.
> When the helpers are called, the code to check memory access during
> permission violation will never be called... and the guest will receive an
> hypercall failure.
>

> This is not the right behavior, the hypercall should only fail if the
> permissions are effectively wrong after check mem access has been called.
>

Ack, I guess the straight forward solution here would be to forward the
read/write event to the mem_access listener in the inline gvirt_to_maddr
function. For mem_access however I should really include both the gvaddr
and gpaddr values, which means the translation would happen twice, once
with gva_to_ipa (that uses the MMU without the flag-based permission checks
to translate), forward to mem_access, then do the check with the flag-based
permission check again if mem_access is clear. Would that be an acceptable
approach in your opinion?

Tamas


>
> Regards,
>
> --
> Julien Grall
>

[-- Attachment #1.2: Type: text/html, Size: 5414 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2014-09-24 21:24 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-23 13:14 [PATCH for-4.5 v8 00/19] Mem_event and mem_access for ARM Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 01/19] xen: Relocate mem_access and mem_event into common Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 02/19] xen: Relocate struct npfec definition " Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 03/19] xen: Relocate p2m_access_t into common and swap the order Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 04/19] xen: Relocate p2m_mem_access_resume to mem_access common Tamas K Lengyel
2014-09-23 13:28   ` Jan Beulich
2014-09-23 14:04     ` Tamas K Lengyel
2014-09-23 14:08       ` Jan Beulich
2014-09-23 14:15         ` Tamas K Lengyel
2014-09-23 15:02           ` Jan Beulich
2014-09-23 13:14 ` [PATCH for-4.5 v8 05/19] xen: Relocate set_access_required domctl into common Tamas K Lengyel
2014-09-24 14:18   ` Julien Grall
2014-09-24 15:05     ` Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 06/19] xen: Relocate mem_event_op domctl and access_op memop " Tamas K Lengyel
2014-09-23 13:32   ` Jan Beulich
2014-09-23 14:00     ` Razvan Cojocaru
2014-09-23 14:07       ` Jan Beulich
2014-09-23 14:13         ` Tamas K Lengyel
2014-09-23 14:23           ` Razvan Cojocaru
2014-09-23 14:28             ` Tamas K Lengyel
2014-09-23 14:19         ` Razvan Cojocaru
2014-09-23 14:08       ` Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 07/19] x86/p2m: Typo fix for spelling ambiguous Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 08/19] xen/mem_event: Clean out superfluous white-spaces Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 09/19] xen/mem_event: Relax error condition on debug builds Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 10/19] xen/mem_event: Abstract architecture specific sanity checks Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 11/19] xen/mem_access: Abstract architecture specific sanity check Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 12/19] xen/arm: p2m changes for mem_access support Tamas K Lengyel
2014-09-24 14:40   ` Ian Campbell
2014-09-24 16:58     ` Tamas K Lengyel
2014-09-24 17:14       ` Razvan Cojocaru
2014-09-24 14:43   ` Julien Grall
2014-09-24 16:48     ` Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 13/19] xen/arm: Implement domain_get_maximum_gpfn Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 14/19] xen/arm: Add p2m_set_permission and p2m_shatter_page helpers Tamas K Lengyel
2014-09-24 14:48   ` Julien Grall
2014-09-23 13:14 ` [PATCH for-4.5 v8 15/19] xen/arm: Data abort exception (R/W) mem_events Tamas K Lengyel
2014-09-24 15:02   ` Ian Campbell
2014-09-24 16:17     ` Tamas K Lengyel
2014-09-24 15:35   ` Julien Grall
2014-09-24 16:27     ` Tamas K Lengyel
2014-09-24 16:51       ` Julien Grall
2014-09-24 17:13         ` Tamas K Lengyel
2014-09-24 20:52           ` Julien Grall
2014-09-24 21:24             ` Tamas K Lengyel [this message]
2014-09-24 22:07               ` Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 16/19] xen/arm: Instruction prefetch abort (X) mem_event handling Tamas K Lengyel
2014-09-24 15:05   ` Ian Campbell
2014-09-24 17:04     ` Tamas K Lengyel
2014-09-24 15:41   ` Julien Grall
2014-09-24 17:08     ` Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 17/19] xen/arm: Enable the compilation of mem_access and mem_event on ARM Tamas K Lengyel
2014-09-24 15:08   ` Ian Campbell
2014-09-24 15:42   ` Julien Grall
2014-09-23 13:14 ` [PATCH for-4.5 v8 18/19] tools/libxc: Allocate magic page for mem access " Tamas K Lengyel
2014-09-23 13:14 ` [PATCH for-4.5 v8 19/19] tools/tests: Enable xen-access " Tamas K Lengyel
2014-09-24 15:12   ` Ian Campbell
2014-09-24 16:05     ` Tamas K Lengyel

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=CAErYnsihS_2O0uVK0hv+9uJZZKuuNuSse6X6jE8+MLDQSLm-tA@mail.gmail.com \
    --to=tamas.lengyel@zentific.com \
    --cc=andres@lagarcavilla.org \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@linaro.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=tim@xen.org \
    --cc=tklengyel@sec.in.tum.de \
    --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.