From: Razvan Cojocaru <rcojocaru@bitdefender.com>
To: "Lengyel, Tamas" <tlengyel@novetta.com>
Cc: Jun Nakajima <jun.nakajima@intel.com>,
Wei Liu <wei.liu2@citrix.com>,
kevin.tian@intel.com, keir@xen.org,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
George Dunlap <george.dunlap@eu.citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
eddie.dong@intel.com, Xen-devel <xen-devel@lists.xen.org>,
Aravind.Gopalakrishnan@amd.com, Jan Beulich <jbeulich@suse.com>,
suravee.suthikulpanit@amd.com, boris.ostrovsky@oracle.com,
Ian Jackson <ian.jackson@eu.citrix.com>
Subject: Re: [PATCH V3 1/3] xen/mem_access: Support for memory-content hiding
Date: Tue, 7 Jul 2015 16:09:16 +0300 [thread overview]
Message-ID: <559BCF7C.9010001@bitdefender.com> (raw)
In-Reply-To: <CAD33N+4kN7tiSK8gEePikZcpVL2FqxwsTJDLzfmVbQ3zZr9F7A@mail.gmail.com>
On 07/07/2015 03:04 PM, Lengyel, Tamas wrote:
>
>
> On Tue, Jul 7, 2015 at 4:10 AM, Razvan Cojocaru
> <rcojocaru@bitdefender.com <mailto:rcojocaru@bitdefender.com>> wrote:
>
> On 07/06/2015 09:30 PM, Lengyel, Tamas wrote:
> > If you'd prefer that I do some ground work for the future
> (i.e. rename
> > MEM_ACCESS constants, etc.), please let me know.
> >
> >
> > Yeap, that sounds reasonable to me.
>
> Any objections to this renaming?
>
> 151 #define MEM_ACCESS_EMULATE_NOWRITE (1 << 7)
> 152 /*
> 153 * Data is being sent back to the hypervisor in the event response,
> to be
> 154 * returned by the read function when emulating an instruction.
> 155 * This flag is only useful when combined with MEM_ACCESS_EMULATE or
> 156 * MEM_ACCESS_EMULATE_NOWRITE.
> 157 * The flag has been defined here because it is used with mem_access
> 158 * events, and so should not accidentaly overwrite one of the above.
> 159 */
> 160 #define VM_EVENT_FLAG_SET_EMUL_READ_DATA (1 << 8)
>
> Are there any other small changes you'd like to see in this patch?
>
>
> That should suffice - with the flag being move to the VM_EVENT_FLAG list
> and the bitshift adjusted accordingly.
Actually, thinking about this more, there is a small problem with the
vm_event.h code:
1417 void p2m_mem_access_emulate_check(struct vcpu *v,
1418 const vm_event_response_t *rsp)
1419 {
1420 /* Mark vcpu for skipping one instruction upon rescheduling. */
1421 if ( rsp->flags & MEM_ACCESS_EMULATE )
1422 {
1423 xenmem_access_t access;
1424 bool_t violation = 1;
1425 const struct vm_event_mem_access *data = &rsp->u.mem_access;
1426
1427 if ( p2m_get_mem_access(v->domain, data->gfn, &access) == 0 )
1428 {
1429 switch ( access )
1430 {
1431 case XENMEM_access_n:
1432 case XENMEM_access_n2rwx:
1433 default:
1434 violation = data->flags & MEM_ACCESS_RWX;
So, in p2m_mem_access_emulate_check() MEM_ACCESS_EMULATE is checked for
in rsp->flags (_not_ data->flags), but then in vm_event.h:
42 /*
43 * VCPU_PAUSED in a request signals that the vCPU triggering the
event has been
44 * paused
45 * VCPU_PAUSED in a response signals to unpause the vCPU
46 */
47 #define VM_EVENT_FLAG_VCPU_PAUSED (1 << 0)
48 /* Flags to aid debugging mem_event */
49 #define VM_EVENT_FLAG_FOREIGN (1 << 1)
[...]
126 /*
127 * mem_access flag definitions
128 *
129 * These flags are set only as part of a mem_event request.
130 *
131 * R/W/X: Defines the type of violation that has triggered the event
132 * Multiple types can be set in a single violation!
133 * GLA_VALID: If the gla field holds a guest VA associated with the
event
134 * FAULT_WITH_GLA: If the violation was triggered by accessing gla
135 * FAULT_IN_GPT: If the violation was triggered during translating gla
136 */
137 #define MEM_ACCESS_R (1 << 0)
138 #define MEM_ACCESS_W (1 << 1)
139 #define MEM_ACCESS_X (1 << 2)
140 #define MEM_ACCESS_RWX (MEM_ACCESS_R | MEM_ACCESS_W
| MEM_ACCESS_X)
141 #define MEM_ACCESS_RW (MEM_ACCESS_R | MEM_ACCESS_W)
142 #define MEM_ACCESS_RX (MEM_ACCESS_R | MEM_ACCESS_X)
143 #define MEM_ACCESS_WX (MEM_ACCESS_W | MEM_ACCESS_X)
144 #define MEM_ACCESS_GLA_VALID (1 << 3)
145 #define MEM_ACCESS_FAULT_WITH_GLA (1 << 4)
146 #define MEM_ACCESS_FAULT_IN_GPT (1 << 5)
147 /*
148 * The following flags can be set in the response.
149 *
150 * Emulate the fault-causing instruction (if set in the event
response flags).
151 * This will allow the guest to continue execution without lifting
the page
152 * access restrictions.
153 */
154 #define MEM_ACCESS_EMULATE (1 << 6)
155 /*
156 * Same as MEM_ACCESS_EMULATE, but with write operations or operations
157 * potentially having side effects (like memory mapped or port I/O)
disabled.
158 */
159 #define MEM_ACCESS_EMULATE_NOWRITE (1 << 7)
So VM_EVENT_FLAG_FOREIGN (1 << 1), and then MEM_ACCESS_EMULATE (1 << 6).
Now you're adding VM_EVENT_FLAG_TOGGLE_SINGLESTEP (1 << 2), and if we're
not very careful, slowly but surely the VM_EVENT_FLAG_ constants will
crawl towards (1 << 6) and start overlapping with MEM_ACCESS_EMULATE,
MEM_ACCESS_EMULATE_NOWRITE and so on, because they're not clearly
#defined right after the rest of the VM_EVENT_FLAG_ ones, are called
MEM_ACCESS_<something> just like the mem_access event specific flags,
and they use bit shifts relative to the MEM_ACCESS_ ones as well. This
is in part what has caused my confusion here.
What do you think?
Thanks,
Razvan
next prev parent reply other threads:[~2015-07-07 13:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-06 15:51 [PATCH V3 0/3] Vm_event memory introspection helpers Razvan Cojocaru
2015-07-06 15:51 ` [PATCH V3 1/3] xen/mem_access: Support for memory-content hiding Razvan Cojocaru
2015-07-06 16:50 ` Lengyel, Tamas
2015-07-06 18:27 ` Razvan Cojocaru
2015-07-06 18:30 ` Lengyel, Tamas
2015-07-07 8:10 ` Razvan Cojocaru
2015-07-07 12:04 ` Lengyel, Tamas
2015-07-07 12:33 ` Razvan Cojocaru
2015-07-07 13:09 ` Razvan Cojocaru [this message]
2015-07-07 13:15 ` Lengyel, Tamas
2015-07-07 13:21 ` Razvan Cojocaru
2015-07-07 13:27 ` Lengyel, Tamas
2015-07-07 10:51 ` George Dunlap
2015-07-07 13:27 ` Jan Beulich
2015-07-07 15:32 ` Razvan Cojocaru
2015-07-07 15:40 ` Jan Beulich
2015-07-07 16:20 ` Razvan Cojocaru
2015-07-07 16:24 ` Jan Beulich
2015-07-06 15:51 ` [PATCH V3 2/3] xen/vm_event: Support for guest-requested events Razvan Cojocaru
2015-07-06 16:55 ` Lengyel, Tamas
2015-07-06 17:57 ` Wei Liu
2015-07-07 11:01 ` George Dunlap
2015-07-07 11:59 ` Razvan Cojocaru
2015-07-07 13:30 ` Jan Beulich
2015-07-07 14:26 ` Daniel De Graaf
2015-07-06 15:51 ` [PATCH V3 3/3] xen/vm_event: Deny register writes if refused by vm_event reply Razvan Cojocaru
2015-07-06 17:05 ` Lengyel, Tamas
2015-07-06 17:16 ` Razvan Cojocaru
2015-07-07 9:06 ` Razvan Cojocaru
2015-07-07 12:55 ` Lengyel, Tamas
2015-07-07 13:21 ` Razvan Cojocaru
2015-07-07 13:26 ` Lengyel, Tamas
2015-07-07 11:05 ` George Dunlap
2015-07-07 13:42 ` Jan Beulich
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=559BCF7C.9010001@bitdefender.com \
--to=rcojocaru@bitdefender.com \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=eddie.dong@intel.com \
--cc=george.dunlap@eu.citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tlengyel@novetta.com \
--cc=wei.liu2@citrix.com \
--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.