Skip to content
Modern Hypervisor for the Cloud
C C++ Python Shell Assembly Haxe Other
Branch: topic/virt-x86
Clone or download

Latest commit

sthibaul and rbradford Fix heap overflow in ip_reass on big packet input
When the first fragment does not fit in the preallocated buffer, q will
already be pointing to the ext buffer, so we mustn't try to update it.

Fixes CVE-2019-14378

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Latest commit 7e323b6 Aug 27, 2019

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
accel accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
audio audio: Make audio optional and configurable Apr 25, 2019
authz filemon: fix watch IDs to avoid potential wraparound issues Apr 2, 2019
backends vhost-user: simplify vhost_user_init/vhost_user_cleanup Mar 13, 2019
block block: Make VVFAT support configurable Apr 25, 2019
bsd-user avoid TABs in files that only contain a few Jan 11, 2019
capstone @ 22ead3e disas: Add capstone as submodule Oct 26, 2017
chardev socket: allow wait=false for client socket Apr 16, 2019
contrib virtiofsd: use memcpy() for non-NUL terminated strings May 8, 2019
crypto trace-events: Shorten file names in comments Mar 22, 2019
default-configs build: Remove CONFIG_PCI_DEVICES from ARM build Apr 25, 2019
disas accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
docs virtio-fs: Add vhost-user slave commands for mapping Apr 25, 2019
dtc @ 88f1890 Update dtc/libfdt submodule to v1.4.7 Oct 2, 2018
fpu hardfloat: fix float32/64 fused multiply-add Mar 25, 2019
fsdev qemu/queue.h: leave head structs anonymous unless necessary Jan 11, 2019
gdb-xml RISC-V: Add 64-bit gdb xml files. Mar 19, 2019
hw vhost & sysfw: Mark BIOS regions as "vhost_ignore" May 21, 2019
include vhost & sysfw: Mark BIOS regions as "vhost_ignore" May 21, 2019
io trace-events: Shorten file names in comments Mar 22, 2019
libdecnumber build: remove CONFIG_LIBDECNUMBER Oct 16, 2017
linux-headers include: update Linux headers to 4.21-rc1/5.0-rc1 Feb 4, 2019
linux-user linux-user: rename gettid() to sys_gettid() to avoid clash with glibc Apr 8, 2019
migration migration/ram.c: Fix use-after-free in multifd_recv_unfill_packet() Apr 9, 2019
nbd nbd/client: Fix error message for server with unusable sizing Apr 8, 2019
net net: tap: use qemu_set_nonblock Mar 29, 2019
pc-bios pc-bios: Update palcode-clipper Mar 25, 2019
po po/Makefile: Modern shell scripting (use $() instead of ``) Oct 24, 2018
python/qemu Merge remote-tracking branch 'remotes/cleber/tags/python-next-pull-re… Mar 7, 2019
qapi hw: watchdog: compile out watchdog Apr 25, 2019
qga qga: process_event() simplification Mar 18, 2019
qobject json: Fix off-by-one assert check in next_state() Mar 26, 2019
qom trace-events: Shorten file names in comments Mar 22, 2019
replay replay: Exit on errors reading from replay log Nov 8, 2018
roms roms: Allow passing configure options to the EDK2 build tools Apr 9, 2019
scripts Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into… Mar 28, 2019
scsi trace-events: Shorten file names in comments Mar 22, 2019
slirp Fix heap overflow in ip_reass on big packet input Aug 27, 2019
stubs hw: i386: Factorize madt cpu entry routine Apr 25, 2019
target arm: tcg: Always build vfp_get_fpscr and vfp_set_fpsr Apr 25, 2019
tcg tcg: Remove TODO file Feb 21, 2019
tests iotest: Fix 241 to run in generic directory Apr 12, 2019
tools nats: Update for latest govmm Aug 27, 2019
trace accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
ui curses: fix wchar_t printf warning Apr 12, 2019
util filemon: fix watch IDs to avoid potential wraparound issues Apr 2, 2019
.cirrus.yml cirrus.yml: Add macOS continuous integration task Mar 8, 2019
.dir-locals.el Add .dir-locals.el file to configure emacs coding style Oct 8, 2015
.editorconfig editorconfig: set emacs mode Nov 1, 2018
.exrc qemu: add .exrc Sep 7, 2012
.gdbinit .gdbinit: load QEMU sub-commands when gdb starts Jun 7, 2017
.gitignore .gitignore: ignore docs/built created for in-tree builds Mar 14, 2019
.gitlab-ci.yml Add a gitlab-ci file for Continuous Integration testing on Gitlab Feb 22, 2019
.gitmodules roms: add the edk2 project as a git submodule Feb 21, 2019
.gitpublish Add a git-publish configuration file Mar 5, 2018
.mailmap maint: Grammar fix to mailmap Dec 11, 2018
.shippable.yml .shippable.yml: disable the win cross tests Dec 17, 2018
.travis.yml .travis.yml: reduce number of targets built while disabling things Mar 25, 2019
CODING_STYLE CODING_STYLE: Define our preferred form for multiline comments Jun 15, 2018
COPYING COPYING: update from FSF Oct 12, 2008
COPYING.LIB COPYING.LIB: Synchronize the LGPL 2.1 with the version from gnu.org Jan 30, 2019
Changelog Use HTTPS for qemu.org and other domains Nov 21, 2017
HACKING HACKING: document preference for g_new instead of g_malloc May 20, 2018
Jenkinsfile build: Generate and upload virtiofsd binary Apr 25, 2019
Kconfig.host USB: Create USB redirection denpency with USB core Apr 25, 2019
LICENSE vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/h… Dec 19, 2014
MAINTAINERS MAINTAINERS: Update the latest email address Mar 29, 2019
Makefile virtiofsd: mark virtiofsd Linux-only Apr 25, 2019
Makefile.objs virtiofsd: Add Makefile wiring for virtiofsd contrib Apr 25, 2019
Makefile.target tests/tcg: enable tcg tests for softmmu Mar 12, 2019
README README: use 'https://' instead of 'git://' Nov 12, 2018
README.md Fix a typo (ref. @bcantrill: Apr 28, 2019
VERSION Update version for v4.0.0 release Apr 23, 2019
arch_init.c arch_init: sort architectures Jun 1, 2018
balloon.c balloon: Allow multiple inhibit users Aug 17, 2018
block.c block: Forward 'discard' to temporary overlay Apr 8, 2019
blockdev-nbd.c nbd: allow authorization with nbd-server-start QMP command Mar 6, 2019
blockdev.c blockdev: Check @replaces in blockdev_mirror_common Mar 19, 2019
blockjob.c blockjob: fix user pause in block_job_error_action Mar 19, 2019
bootdevice.c fw_cfg: ignore suffixes in the bootdevice list dependent on machine c… Aug 17, 2018
configure virtio: add vhost-user-fs-pci device Apr 25, 2019
cpus-common.c qemu/queue.h: simplify reverse access to QTAILQ Jan 11, 2019
cpus.c accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
device-hotplug.c hmp: Fix drive_add ... format=help crash Apr 8, 2019
device_tree.c device_tree: Fix integer overflowing in load_device_tree() Apr 9, 2019
disas.c disas: Add RISC-V support Dec 25, 2018
dma-helpers.c block: explicitly acquire aiocontext in bottom halves that need it Feb 21, 2017
dump.c dump: Set correct vaddr for ELF dump Feb 6, 2019
exec.c accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
gdbstub.c accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
gitdm.config contrib: gitdm: add a mapping for Janus Technologies Mar 12, 2019
hmp-commands-info.hx {hmp, hw/pvrdma}: Expose device internals via monitor interface Mar 16, 2019
hmp-commands.hx hmp: Add hmp_announce_self Mar 5, 2019
hmp.c migration: Fix migrate_set_parameter Apr 5, 2019
hmp.h {hmp, hw/pvrdma}: Expose device internals via monitor interface Mar 16, 2019
ioport.c trace: switch to modular code generation for sub-directories Jan 31, 2017
iothread.c iothread: document about why we need explicit aio_poll() Mar 8, 2019
job-qmp.c jobs: canonize Error object Aug 31, 2018
job.c job: Fix off-by-one assert checks for JobSTT and JobVerbTable Nov 12, 2018
memory.c memory: Fix the memory region type assignment order Mar 18, 2019
memory_ldst.inc.c exec: Fix MAP_RAM for cached access Jun 28, 2018
memory_mapping.c qemu/queue.h: simplify reverse access to QTAILQ Jan 11, 2019
module-common.c all: Clean up includes Feb 4, 2016
monitor.c accel: tcg: Group all TCG stubs into a single header Apr 25, 2019
numa.c numa: Fixed the memory leak of numa error message Jan 28, 2019
os-posix.c util: add qemu_write_pidfile() Oct 2, 2018
os-win32.c util: add qemu_write_pidfile() Oct 2, 2018
qdev-monitor.c qdev: Let the hotplug_handler_unplug() caller delete the device Mar 6, 2019
qemu-bridge-helper.c all: Remove unnecessary glib.h includes Jun 7, 2016
qemu-deprecated.texi socket: allow wait=false for client socket Apr 16, 2019
qemu-doc.texi qemu-doc: Add section on MIPS' Boston board Feb 27, 2019
qemu-edid.c display/edid: add edid generator to qemu. Sep 27, 2018
qemu-ga.texi qemu-ga: Remove stray 'q' in documentation Oct 28, 2016
qemu-img-cmds.hx qemu-img: fix .hx and .texi disparity Apr 12, 2019
qemu-img.c qemu-img: Enable BDRV_REQ_MAY_UNMAP in convert Apr 2, 2019
qemu-img.texi qemu-img: fix .hx and .texi disparity Apr 12, 2019
qemu-io-cmds.c qemu-io: Add write -n for BDRV_REQ_NO_FALLBACK Mar 26, 2019
qemu-io.c qom: Clean up error reporting in user_creatable_add_opts_foreach() Oct 19, 2018
qemu-keymap.c ui: use enum to string helpers Aug 24, 2018
qemu-nbd.c qemu-nbd: add support for authorization of TLS clients Mar 6, 2019
qemu-nbd.texi qemu-nbd: add support for authorization of TLS clients Mar 6, 2019
qemu-option-trace.texi qemu-option-trace: -trace enable= is a pattern, not a file May 20, 2018
qemu-options-wrapper.h qemu-img: remove references to GEN_DOCS May 20, 2018
qemu-options.h Clean up ill-advised or unusual header guards Jul 12, 2016
qemu-options.hx Merge remote-tracking branch 'remotes/kraxel/tags/ui-20190313-pull-re… Mar 13, 2019
qemu-seccomp.c seccomp: report more useful errors from seccomp Mar 27, 2019
qemu-tech.texi cli qmp: Mark --preconfig, exit-preconfig experimental Jul 16, 2018
qemu.nsi Use HTTPS for qemu.org and other domains Nov 21, 2017
qemu.sasl Default to GSSAPI (Kerberos) instead of DIGEST-MD5 for SASL May 9, 2017
qmp.c qapi: make query-cpu-definitions depend on specific targets Feb 18, 2019
qtest.c char: allow specifying a GMainContext at opening time Feb 13, 2019
replication.c replication: Introduce new APIs to do replication operation Sep 13, 2016
replication.h block/replication: Remove protocol_name field Mar 26, 2018
rules.mak build: switch to Kconfig Mar 7, 2019
thunk.c thunk: improve readability of allocation loop Mar 11, 2019
tpm.c tpm: Clean up error reporting in tpm_init_tpmdev() Oct 19, 2018
trace-events trace-events: Fix attribution of trace points to source Mar 22, 2019
version.rc Use HTTPS for qemu.org and other domains Nov 21, 2017
vl.c vl: Adjust QEMU system binary to indicate this is NEMU Apr 25, 2019
win_dump.c dump: fix Windows dump memory run mapping Oct 2, 2018
win_dump.h dump: move Windows dump structures definitions Oct 2, 2018

README.md

NEMU, a cloud hypervisor

NEMU is an open source hypervisor specifically built and designed to run modern cloud workloads on modern 64-bit Intel and ARM CPUs.

Rationale

Modern guest operating systems that host cloud workloads run on virtual hardware platforms that do not require any legacy hardware. Additonally modern CPUs used in data centers have advanced virtualization features that have eliminated the need for most CPU emulation.

There currently is no open source hypervisor solutions with a clear and narrow focus on running cloud specific workloads on modern CPUs. All available solutions have evolved over time and try to be fairly generic. They attempt to support a wide range of virtual hardware architectures and run on hardware that has varying degree of hardware virtualization support. This results in a need to provide a large set of legacy platforms and device models requiring CPU, device and platform emulation. As a consequence they are built on top of large and complex code bases.

NEMU on the other hand aims to leverage KVM, be narrow focused on exclusively running modern, cloud native workloads, on top of a limited set of hardware architectures and platforms. It assumes fairly recent CPUs and KVM allowing for the the elimination of most emulation logic.

This will allow for smaller code base, lower complexity and a reduced attack surface compared to existing solutions. It also gives more space for providing cloud specific optimizations and building a more performant hypervisor for the cloud. Reducing the size and complexity of the code allows for easier review, fuzz testing, modularization and future innovation.

QEMU base

QEMU is the current de facto standard open source cloud hypervisor. It has a rich set of features that have been developed and tested over time. This includes features such as live migration, PCI, Memory, NVDIMM and CPU hotplug, VFIO, mediated device passthrough and vhost-user. QEMU also has been the code base on which significant effort and innovation has been invested to create multiple performant I/O models

It also comes with a very large support for legacy features, for platforms and devices and is capable of running on a large number of hardware platforms. It also allows for cross platform emulation. One of its fundamental goal is about being as generic as possible and run on a large set of hardware and host a diversity of workloads. QEMU needed emulation support to be build into the code as hardware lacked critical virtualization features.

QEMU allows for build time configuration of some of its rich feature set. However there is quite a large amount of the code base that cannot be compiled out as the emulated platforms make assumptions about certain legacy devices being always present. QEMU also has abstractions within the code to support all of these legacy features.

NEMU

NEMU is based off QEMU and leverage its rich feature set, but with a much narrower focus. It leverages the performant, robust and stable QEMU codebase without the need to supporting the myriad of features, platforms and hardware that are not relevant for the cloud.

The goal of NEMU is to retain the absolute minimal subset of the QEMU codebase that is required for the feature set described below. The QEMU code base will also be simplified to reduce the number of generic abstractions.

Requirements

NEMU provides a PCI virtio platform with support for vfio based device direct assigment and mediated device assigment support. It also aims to retain support for live migration, vhost-user and a build time configurable device hotplug support for PCI, memory, NVDIMM and CPU. NEMU will need to emulate a small subset of features including PCI host brige.

NEMU also introduces a new QEMU x86-64 machine type: virt. It is a purely virtual platform, that does not try to emulate any existing x86 chipset or legacy bus (ISA, SMBUS, etc) and offloads as many features to KVM as possible. This is a similar approach as the already existing AArch64 virt machine type and NEMU will only support the two virt machine types.

Below is a list of QEMU features that NEMU will retain and add.

High Level

  • KVM and KVM only based
  • Minimal emulation
  • Low latency
  • Low memory footprint
  • Low complexity
  • Small attack surface
  • 64-bit support only
  • Optional and build time configurable CPU, memory, PCI and NVDIMM hotplug
  • Machine to machine migration

Architectures

NEMU only supports two 64-bit CPU architectures:

  • x86-64
  • AArch64

Guest OS

  • 64-bit Linux

Guest Platforms

  • virt (x86-64) QEMU x86-64 virtual machine
  • virt (AArch64) QEMU AArch64 virtual machine

Host Platforms

  • Linux

Firmware and boot

  • UEFI
  • ACPI
    • Hardware Reduced ACPI
    • Optional hotplug support
      • CPU
      • Memory
      • NVDIMM
      • PCI devices
      • VFIO
      • vhost-user

Boot methods

  • UEFI boot

Memory

  • QEMU allocated memory
  • File mapped memory
  • Huge pages
  • Memory pinning

Devices

Models

  • virtio
    • blk
    • console
    • crypto
    • pci-net
    • rng-pci
    • scsi
      • virtio
      • vhost
    • 9pfs
    • vhost-user-scsi
    • vhost-user-net
    • vhost-user-blk
    • vhost-vsock-pci
  • vfio
    • network
    • mediated device
    • storage
    • rdma
  • NVDIMM
  • TPM
    • vTPM
    • Host TPM passthrough
  • SCSI controller
  • PCI controller (pci-lite)

Block

  • cdrom
  • nvme
  • ceph/rbd

Guest Image Formats

  • QCOW2
  • RAW
  • VHD

Migration

  • Network based over TLS
  • File based (Local migration)

Monitoring

  • QMP
  • QAPI

To be discussed

  • 64-bit Windows Server (headless)
  • qboot
  • Graphic Console
  • virtio-block-crypto
  • QEMU client support as modules
    • iscsi
    • nbd
    • nfs
    • gluster
  • RDMA live migration
  • SLIRP
  • Guest agent
You can’t perform that action at this time.