[RFC PATCH 00/10] xsm: introducing domain roles

Daniel P. Smith posted 10 patches 2 years, 10 months ago
Failed in applying to current master (apply log)
xen/arch/arm/dm.c                     |   2 +-
xen/arch/arm/domctl.c                 |   6 +-
xen/arch/arm/hvm.c                    |   2 +-
xen/arch/arm/mm.c                     |   2 +-
xen/arch/arm/platform_hypercall.c     |   2 +-
xen/arch/x86/acpi/cpu_idle.c          |   3 +-
xen/arch/x86/cpu/mcheck/mce.c         |   2 +-
xen/arch/x86/cpu/mcheck/vmce.h        |   3 +-
xen/arch/x86/cpu/vpmu.c               |   9 +-
xen/arch/x86/crash.c                  |   2 +-
xen/arch/x86/domctl.c                 |   8 +-
xen/arch/x86/hvm/dm.c                 |   2 +-
xen/arch/x86/hvm/hvm.c                |  12 +-
xen/arch/x86/io_apic.c                |   9 +-
xen/arch/x86/irq.c                    |   4 +-
xen/arch/x86/mm.c                     |  22 +-
xen/arch/x86/mm/mem_paging.c          |   2 +-
xen/arch/x86/mm/mem_sharing.c         |   8 +-
xen/arch/x86/mm/p2m.c                 |   2 +-
xen/arch/x86/mm/paging.c              |   4 +-
xen/arch/x86/mm/shadow/set.c          |   2 +-
xen/arch/x86/msi.c                    |   6 +-
xen/arch/x86/nmi.c                    |   3 +-
xen/arch/x86/pci.c                    |   2 +-
xen/arch/x86/physdev.c                |  16 +-
xen/arch/x86/platform_hypercall.c     |  10 +-
xen/arch/x86/pv/emul-priv-op.c        |   2 +-
xen/arch/x86/setup.c                  |   3 +
xen/arch/x86/sysctl.c                 |   4 +-
xen/arch/x86/traps.c                  |   2 +-
xen/arch/x86/x86_64/mm.c              |  11 +-
xen/common/Kconfig                    |  14 +-
xen/common/domain.c                   | 120 ++++-
xen/common/domctl.c                   |  12 +-
xen/common/event_channel.c            |  15 +-
xen/common/grant_table.c              |  16 +-
xen/common/hypfs.c                    |   2 +-
xen/common/kernel.c                   |   2 +-
xen/common/kexec.c                    |   4 +-
xen/common/keyhandler.c               |   4 +-
xen/common/mem_access.c               |   2 +-
xen/common/memory.c                   |  16 +-
xen/common/monitor.c                  |   2 +-
xen/common/sched/core.c               |   6 +-
xen/common/shutdown.c                 |  14 +-
xen/common/sysctl.c                   |   8 +-
xen/common/vm_event.c                 |   7 +-
xen/common/xenoprof.c                 |   5 +-
xen/drivers/char/console.c            |   2 +-
xen/drivers/char/ns16550.c            |   3 +-
xen/drivers/passthrough/device_tree.c |   4 +-
xen/drivers/passthrough/pci.c         |  24 +-
xen/drivers/passthrough/vtd/iommu.c   |   2 +-
xen/include/xen/sched.h               |  30 +-
xen/include/xsm/dummy.h               | 256 +++++-----
xen/include/xsm/roles.h               |  70 +++
xen/include/xsm/xsm.h                 | 710 +++++++++++++++++---------
xen/xsm/Makefile                      |   3 +-
xen/xsm/dummy.c                       | 160 ------
xen/xsm/flask/flask_op.c              |   2 +-
xen/xsm/silo.c                        |  22 +-
xen/xsm/xsm_core.c                    |  46 +-
62 files changed, 991 insertions(+), 759 deletions(-)
create mode 100644 xen/include/xsm/roles.h
delete mode 100644 xen/xsm/dummy.c
[RFC PATCH 00/10] xsm: introducing domain roles
Posted by Daniel P. Smith 2 years, 10 months ago
During the hyperlaunch design sessions a request was made to come up with a
formal definition of the roles a domain was allowed to take on. In particular
the primary focus was to answer what is the control domain and what is the
hardware domain. Another comment came up during the discussion on PCI pass
through and how it would work in a disaggregated platform as what was being
proposed as a primary use case for hyperlaunch. Based on these concerns, the
hyperlaunch team took a hard look at what were all the roles that were either
explicitly defined in code, loosely defined in code, as well as those that were
more conceptual or required a solutions like Flask.

The result is that a set of seven explicitly assignable domain roles and three
implied domain roles were identified and defined. To provide for and enforce
these domain roles, it was identified that the core XSM system in fact existed
in this pseudo unsupported but supported existance. Depending on whether XSM
was turned on or off did not turn on or off the XSM hooks, it only deterimined
if the base "dummy policy module" was inlined in for the XSM hooks or if they
were made availble through the xsm_ops op dispatch structure.

This patch set starts with converting the existing security controls to using
the identified domain roles. It then moves to making the domain roles the core
enforcement mechanism for XSM and merging the split state of existance into an
equivalent of its supported form. With the conversion of XSM, the SILO policy
module is refactored to achieve its security goal as an extension of the domain
roles mechanism. The necessary adjustments are made to Flask and the Kconfig
system to support this work.

Due to the impact of this change, every effort was made to ensure the patch set
is bisectable and the features can be tested incrementally. This is an RFC with
limited building and testing completed against it, therefore one may find build
configurations and runtime configurations that do not work.

Daniel P. Smith (10):
  headers: introduce new default privilege model
  control domain: refactor is_control_domain
  xenstore: migrate to default privilege model
  xsm: convert rewrite privilege check function
  hardware domain: convert to domain roles
  xsm-roles: covert the dummy system to roles
  xsm-roles: adjusting core xsm
  xsm-silo: convert silo over to domain roles
  xsm-flask: clean up for domain roles conversion
  common/Kconfig: updating Kconfig for domain roles

 xen/arch/arm/dm.c                     |   2 +-
 xen/arch/arm/domctl.c                 |   6 +-
 xen/arch/arm/hvm.c                    |   2 +-
 xen/arch/arm/mm.c                     |   2 +-
 xen/arch/arm/platform_hypercall.c     |   2 +-
 xen/arch/x86/acpi/cpu_idle.c          |   3 +-
 xen/arch/x86/cpu/mcheck/mce.c         |   2 +-
 xen/arch/x86/cpu/mcheck/vmce.h        |   3 +-
 xen/arch/x86/cpu/vpmu.c               |   9 +-
 xen/arch/x86/crash.c                  |   2 +-
 xen/arch/x86/domctl.c                 |   8 +-
 xen/arch/x86/hvm/dm.c                 |   2 +-
 xen/arch/x86/hvm/hvm.c                |  12 +-
 xen/arch/x86/io_apic.c                |   9 +-
 xen/arch/x86/irq.c                    |   4 +-
 xen/arch/x86/mm.c                     |  22 +-
 xen/arch/x86/mm/mem_paging.c          |   2 +-
 xen/arch/x86/mm/mem_sharing.c         |   8 +-
 xen/arch/x86/mm/p2m.c                 |   2 +-
 xen/arch/x86/mm/paging.c              |   4 +-
 xen/arch/x86/mm/shadow/set.c          |   2 +-
 xen/arch/x86/msi.c                    |   6 +-
 xen/arch/x86/nmi.c                    |   3 +-
 xen/arch/x86/pci.c                    |   2 +-
 xen/arch/x86/physdev.c                |  16 +-
 xen/arch/x86/platform_hypercall.c     |  10 +-
 xen/arch/x86/pv/emul-priv-op.c        |   2 +-
 xen/arch/x86/setup.c                  |   3 +
 xen/arch/x86/sysctl.c                 |   4 +-
 xen/arch/x86/traps.c                  |   2 +-
 xen/arch/x86/x86_64/mm.c              |  11 +-
 xen/common/Kconfig                    |  14 +-
 xen/common/domain.c                   | 120 ++++-
 xen/common/domctl.c                   |  12 +-
 xen/common/event_channel.c            |  15 +-
 xen/common/grant_table.c              |  16 +-
 xen/common/hypfs.c                    |   2 +-
 xen/common/kernel.c                   |   2 +-
 xen/common/kexec.c                    |   4 +-
 xen/common/keyhandler.c               |   4 +-
 xen/common/mem_access.c               |   2 +-
 xen/common/memory.c                   |  16 +-
 xen/common/monitor.c                  |   2 +-
 xen/common/sched/core.c               |   6 +-
 xen/common/shutdown.c                 |  14 +-
 xen/common/sysctl.c                   |   8 +-
 xen/common/vm_event.c                 |   7 +-
 xen/common/xenoprof.c                 |   5 +-
 xen/drivers/char/console.c            |   2 +-
 xen/drivers/char/ns16550.c            |   3 +-
 xen/drivers/passthrough/device_tree.c |   4 +-
 xen/drivers/passthrough/pci.c         |  24 +-
 xen/drivers/passthrough/vtd/iommu.c   |   2 +-
 xen/include/xen/sched.h               |  30 +-
 xen/include/xsm/dummy.h               | 256 +++++-----
 xen/include/xsm/roles.h               |  70 +++
 xen/include/xsm/xsm.h                 | 710 +++++++++++++++++---------
 xen/xsm/Makefile                      |   3 +-
 xen/xsm/dummy.c                       | 160 ------
 xen/xsm/flask/flask_op.c              |   2 +-
 xen/xsm/silo.c                        |  22 +-
 xen/xsm/xsm_core.c                    |  46 +-
 62 files changed, 991 insertions(+), 759 deletions(-)
 create mode 100644 xen/include/xsm/roles.h
 delete mode 100644 xen/xsm/dummy.c

-- 
2.20.1