mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Make MEM_ACCESS configurable
Select MEM_ACCESS_ALWAYS_ON on x86 to mark that MEM_ACCESS is not configurable on x86. Avoid selecting it on ARM. Rename HAS_MEM_ACCESS to MEM_ACCESS everywhere. Add a prompt and a description to MEM_ACCESS in xen/common/Kconfig. The result is that the user-visible option is MEM_ACCESS, and it is configurable only on ARM (disabled by default). At the moment the arch-specific mem_access code remains enabled on ARM, even with MEM_ACCESS=y. The purpose is to reduce code size. The option doesn't depend on EXPERT because it would be nice to ecurity-support configurations without MEM_ACCESS and a non-expert should be able to disable it. Suggested-by: Julien Grall <julien.grall@arm.com> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org> Acked-by: Jan Beulich <jbeulich@suse.com> Acked-by: Julien Grall <julien.grall@arm.com> CC: dgdegra@tycho.nsa.gov CC: andrew.cooper3@citrix.com CC: George.Dunlap@eu.citrix.com CC: ian.jackson@eu.citrix.com CC: jbeulich@suse.com CC: julien.grall@arm.com CC: konrad.wilk@oracle.com CC: sstabellini@kernel.org CC: tim@xen.org CC: wei.liu2@citrix.com --- Changes in v5: - change MEM_ACCESS_ALWAYS_ON to bool - change default for MEM_ACCESS, default y if MEM_ACCESS_ALWAYS_ON Changes in v4: - remove HAS_MEM_ACCESS - move MEM_ACCESS_ALWAYS_ON to common - combile default and bool to def_bool Changes in v3: - keep HAS_MEM_ACCESS to mark that an arch can do MEM_ACCESS - introduce MEM_ACCESS_ALWAYS_ON - the main MEM_ACCESS option is in xen/common/Kconfig Changes in v2: - patch added
This commit is contained in:
1 parent
0a7b185bd2
commit
634cfc8beb
11 files changed
+21
-14
No files matched your search
@@ -29,7 +29,7 @@ CONFIG_COMPAT=y
|
||||
CONFIG_CORE_PARKING=y
|
||||
CONFIG_HAS_ALTERNATIVE=y
|
||||
CONFIG_HAS_EX_TABLE=y
|
||||
CONFIG_HAS_MEM_ACCESS=y
|
||||
CONFIG_MEM_ACCESS=y
|
||||
CONFIG_HAS_MEM_PAGING=y
|
||||
CONFIG_HAS_MEM_SHARING=y
|
||||
CONFIG_HAS_PDX=y
|
||||
|
||||
@@ -17,7 +17,6 @@ config ARM
|
||||
def_bool y
|
||||
select HAS_ALTERNATIVE
|
||||
select HAS_DEVICE_TREE
|
||||
select HAS_MEM_ACCESS
|
||||
select HAS_PASSTHROUGH
|
||||
select HAS_PDX
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ config X86
|
||||
select HAS_GDBSX
|
||||
select HAS_IOPORTS
|
||||
select HAS_KEXEC
|
||||
select HAS_MEM_ACCESS
|
||||
select MEM_ACCESS_ALWAYS_ON
|
||||
select HAS_MEM_PAGING
|
||||
select HAS_MEM_SHARING
|
||||
select HAS_NS16550
|
||||
|
||||
+9
-1
@@ -20,9 +20,17 @@ config HAS_DEVICE_TREE
|
||||
config HAS_EX_TABLE
|
||||
bool
|
||||
|
||||
config HAS_MEM_ACCESS
|
||||
config MEM_ACCESS_ALWAYS_ON
|
||||
bool
|
||||
|
||||
config MEM_ACCESS
|
||||
def_bool MEM_ACCESS_ALWAYS_ON
|
||||
prompt "Memory Access and VM events" if !MEM_ACCESS_ALWAYS_ON
|
||||
---help---
|
||||
|
||||
Framework to configure memory access types for guests and receive
|
||||
related events in userspace.
|
||||
|
||||
config HAS_MEM_PAGING
|
||||
bool
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ obj-y += lib.o
|
||||
obj-$(CONFIG_NEEDS_LIST_SORT) += list_sort.o
|
||||
obj-$(CONFIG_LIVEPATCH) += livepatch.o livepatch_elf.o
|
||||
obj-y += lzo.o
|
||||
obj-$(CONFIG_HAS_MEM_ACCESS) += mem_access.o
|
||||
obj-$(CONFIG_MEM_ACCESS) += mem_access.o
|
||||
obj-y += memory.o
|
||||
obj-y += monitor.o
|
||||
obj-y += multicall.o
|
||||
|
||||
+1
-1
@@ -1085,7 +1085,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
|
||||
copyback = 1;
|
||||
break;
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
case XEN_DOMCTL_set_access_required:
|
||||
if ( unlikely(current->domain == d) ) /* no domain_pause() */
|
||||
ret = -EPERM;
|
||||
|
||||
@@ -78,7 +78,7 @@ long p2m_set_mem_access_multi(struct domain *d,
|
||||
*/
|
||||
int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access);
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
int mem_access_memop(unsigned long cmd,
|
||||
XEN_GUEST_HANDLE_PARAM(xen_mem_access_op_t) arg);
|
||||
#else
|
||||
@@ -88,7 +88,7 @@ int mem_access_memop(unsigned long cmd,
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif /* CONFIG_HAS_MEM_ACCESS */
|
||||
#endif /* CONFIG_MEM_ACCESS */
|
||||
|
||||
#endif /* _XEN_MEM_ACCESS_H */
|
||||
|
||||
|
||||
@@ -584,7 +584,7 @@ static XSM_INLINE int xsm_vm_event_control(XSM_DEFAULT_ARG struct domain *d, int
|
||||
return xsm_default_action(action, current->domain, d);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
static XSM_INLINE int xsm_mem_access(XSM_DEFAULT_ARG struct domain *d)
|
||||
{
|
||||
XSM_ASSERT_ACTION(XSM_DM_PRIV);
|
||||
|
||||
@@ -143,7 +143,7 @@ struct xsm_operations {
|
||||
|
||||
int (*vm_event_control) (struct domain *d, int mode, int op);
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
int (*mem_access) (struct domain *d);
|
||||
#endif
|
||||
|
||||
@@ -582,7 +582,7 @@ static inline int xsm_vm_event_control (xsm_default_t def, struct domain *d, int
|
||||
return xsm_ops->vm_event_control(d, mode, op);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
static inline int xsm_mem_access (xsm_default_t def, struct domain *d)
|
||||
{
|
||||
return xsm_ops->mem_access(d);
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ void __init xsm_fixup_ops (struct xsm_operations *ops)
|
||||
|
||||
set_to_dummy_if_null(ops, vm_event_control);
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
set_to_dummy_if_null(ops, mem_access);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1256,7 +1256,7 @@ static int flask_vm_event_control(struct domain *d, int mode, int op)
|
||||
return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__VM_EVENT);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
static int flask_mem_access(struct domain *d)
|
||||
{
|
||||
return current_has_perm(d, SECCLASS_DOMAIN2, DOMAIN2__MEM_ACCESS);
|
||||
@@ -1803,7 +1803,7 @@ static struct xsm_operations flask_ops = {
|
||||
|
||||
.vm_event_control = flask_vm_event_control,
|
||||
|
||||
#ifdef CONFIG_HAS_MEM_ACCESS
|
||||
#ifdef CONFIG_MEM_ACCESS
|
||||
.mem_access = flask_mem_access,
|
||||
#endif
|
||||
|
||||
|
||||