lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 28 May 2021 15:43:20 -0700
From:   Nuno Das Neves <nunodasneves@...ux.microsoft.com>
To:     linux-hyperv@...r.kernel.org, linux-kernel@...r.kernel.org
Cc:     virtualization@...ts.linux-foundation.org, mikelley@...rosoft.com,
        viremana@...ux.microsoft.com, sunilmut@...rosoft.com,
        wei.liu@...nel.org, vkuznets@...hat.com, ligrassi@...rosoft.com,
        kys@...rosoft.com
Subject: [PATCH 00/19] Microsoft Hypervisor root partition ioctl interface

This patch series provides a userspace interface for creating and running guest
virtual machines while running on the Microsoft Hypervisor [0].

Since managing guest machines can only be done when Linux is the root partition,
this series depends on Wei Liu's patch series merged in 5.12:
https://lore.kernel.org/linux-hyperv/20210203150435.27941-1-wei.liu@kernel.org/

The first two patches provide some helpers for converting hypervisor status
codes to linux error codes, and printing hypervisor status codes to dmesg for
debugging.

Hyper-V related headers asm-generic/hyperv-tlfs.h and x86/asm/hyperv-tlfs.h are
split into uapi and non-uapi. The uapi versions contain structures used in both
the ioctl interface and the kernel.

The mshv API is introduced in drivers/hv/mshv_main.c. As each interface is
introduced, documentation is added in Documentation/virt/mshv/api.rst.
The API is file-desciptor based, like KVM. The entry point is /dev/mshv.

/dev/mshv ioctls:
MSHV_CHECK_EXTENSION
MSHV_CREATE_PARTITION

Partition (vm) ioctls:
MSHV_MAP_GUEST_MEMORY, MSHV_UNMAP_GUEST_MEMORY
MSHV_INSTALL_INTERCEPT
MSHV_ASSERT_INTERRUPT
MSHV_GET_PARTITION_PROPERTY, MSHV_SET_PARTITION_PROPERTY
MSHV_CREATE_VP

Vp (vcpu) ioctls:
MSHV_GET_VP_REGISTERS, MSHV_SET_VP_REGISTERS
MSHV_RUN_VP
MSHV_GET_VP_STATE, MSHV_SET_VP_STATE
MSHV_TRANSLATE_GVA
mmap() (register page)

[0] Hyper-V is more well-known, but it really refers to the whole stack
    including the hypervisor and other components that run in Windows kernel
    and userspace.

Changes since RFC:
1. Moved code from virt/mshv to drivers/hv
2. Split hypercall helper functions and synic code to hv_call.c and hv_synic.c
3. MSHV_REQUEST_VERSION ioctl replaced with MSHV_CHECK_EXTENSION
3. Numerous suggestions, fixes, style changes, etc from Michael Kelley, Vitaly
   Kuznetsov, Wei Liu, and Vineeth Pillai
4. Added patch to enable hypervisor enlightenments on partition creation
5. Added Wei Liu's patch for GVA to GPA translation

Nuno Das Neves (18):
  x86/hyperv: convert hyperv statuses to linux error codes
  asm-generic/hyperv: convert hyperv statuses to strings
  drivers/hv: minimal mshv module (/dev/mshv/)
  drivers/hv: check extension ioctl
  drivers/hv: create partition ioctl
  drivers/hv: create, initialize, finalize, delete partition hypercalls
  drivers/hv: withdraw memory hypercall
  drivers/hv: map and unmap guest memory
  drivers/hv: create vcpu ioctl
  drivers/hv: get and set vcpu registers ioctls
  drivers/hv: set up synic pages for intercept messages
  drivers/hv: run vp ioctl and isr
  drivers/hv: install intercept ioctl
  drivers/hv: assert interrupt ioctl
  drivers/hv: get and set vp state ioctls
  drivers/hv: mmap vp register page
  drivers/hv: get and set partition property ioctls
  drivers/hv: Add enlightenment bits to create partition ioctl

Wei Liu (1):
  drivers/hv: Translate GVA to GPA

 .../userspace-api/ioctl/ioctl-number.rst      |    2 +
 Documentation/virt/mshv/api.rst               |  173 +++
 arch/x86/hyperv/Makefile                      |    1 +
 arch/x86/hyperv/hv_init.c                     |    2 +-
 arch/x86/hyperv/hv_proc.c                     |   42 +-
 arch/x86/include/asm/hyperv-tlfs.h            |   15 +-
 arch/x86/include/asm/mshyperv.h               |    1 +
 arch/x86/include/uapi/asm/hyperv-tlfs.h       | 1274 +++++++++++++++++
 arch/x86/kernel/cpu/mshyperv.c                |   16 +
 drivers/hv/Kconfig                            |   18 +
 drivers/hv/Makefile                           |    3 +
 drivers/hv/hv_call.c                          |  744 ++++++++++
 drivers/hv/hv_synic.c                         |  181 +++
 drivers/hv/mshv.h                             |  120 ++
 drivers/hv/mshv_main.c                        | 1153 +++++++++++++++
 include/asm-generic/hyperv-tlfs.h             |  353 +++--
 include/asm-generic/mshyperv.h                |   11 +
 include/linux/mshv.h                          |   61 +
 include/uapi/asm-generic/hyperv-tlfs.h        |  242 ++++
 include/uapi/linux/mshv.h                     |  117 ++
 20 files changed, 4384 insertions(+), 145 deletions(-)
 create mode 100644 Documentation/virt/mshv/api.rst
 create mode 100644 arch/x86/include/uapi/asm/hyperv-tlfs.h
 create mode 100644 drivers/hv/hv_call.c
 create mode 100644 drivers/hv/hv_synic.c
 create mode 100644 drivers/hv/mshv.h
 create mode 100644 drivers/hv/mshv_main.c
 create mode 100644 include/linux/mshv.h
 create mode 100644 include/uapi/asm-generic/hyperv-tlfs.h
 create mode 100644 include/uapi/linux/mshv.h

-- 
2.25.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ