xref: /cloud-hypervisor/README.md (revision 7bfe87b7afd99c967ec2a7c79ffd162695d69fd2)
18ec89bc8SRob Bradford[![Build Status](https://travis-ci.com/cloud-hypervisor/cloud-hypervisor.svg?branch=master)](https://travis-ci.com/cloud-hypervisor/cloud-hypervisor)
20d819377SSamuel Ortiz
3919226f3SSamuel Ortiz1. [What is Cloud Hypervisor?](#1-what-is-cloud-hypervisor)
4919226f3SSamuel Ortiz   * [Requirements](#requirements)
5919226f3SSamuel Ortiz	 + [High Level](#high-level)
6919226f3SSamuel Ortiz     + [Architectures](#architectures)
7919226f3SSamuel Ortiz	 + [Guest OS](#guest-os)
8919226f3SSamuel Ortiz2. [Getting Started](#2-getting-started)
9919226f3SSamuel Ortiz   * [Clone and build](#clone-and-build)
10919226f3SSamuel Ortiz   * [Run](#run)
11919226f3SSamuel Ortiz	 + [Cloud image](#cloud-image)
12919226f3SSamuel Ortiz	 + [Custom kernel and disk image](#custom-kernel-and-disk-image)
13919226f3SSamuel Ortiz		 - [Building your kernel](#building-your-kernel)
14919226f3SSamuel Ortiz		 - [Disk image](#disk-image)
15919226f3SSamuel Ortiz		 - [Booting the guest VM](#booting-the-guest-vm)
16919226f3SSamuel Ortiz3. [Status](#2-status)
17b55d75eaSSebastien Boeuf	* [Device Model](#device-model)
18919226f3SSamuel Ortiz	* [TODO](#todo)
19919226f3SSamuel Ortiz4. [rust-vmm dependency](#4-rust-vmm-dependency)
20919226f3SSamuel Ortiz	* [Firecracker and crosvm](#firecracker-and-crosvm)
21919226f3SSamuel Ortiz5. [Community](#5-community)
22*7bfe87b7SSamuel Ortiz	* [Contribute](#contribute)
23919226f3SSamuel Ortiz	* [Join us](#join-us)
24919226f3SSamuel Ortiz6. [Security](#6-security)
25919226f3SSamuel Ortiz
26919226f3SSamuel Ortiz# 1. What is Cloud Hypervisor?
27919226f3SSamuel Ortiz
28919226f3SSamuel Ortiz**This project is an experiment and should not be used with production workloads.**
29919226f3SSamuel Ortiz
30919226f3SSamuel OrtizCloud Hypervisor is an open source Virtual Machine Monitor (VMM) that runs on top of [KVM](https://www.kernel.org/doc/Documentation/virtual/kvm/api.txt).
31919226f3SSamuel OrtizThe project focuses on exclusively running modern, cloud workloads, on top of a limited set of hardware architectures and platforms.
32919226f3SSamuel OrtizCloud workloads refers to those that are usually run by customers inside a cloud provider. For our purposes this means modern
33919226f3SSamuel OrtizLinux* distributions with most I/O handled by paravirtualised devices (i.e. virtio), no requirement for legacy devices and recent CPUs and KVM.
34919226f3SSamuel Ortiz
35919226f3SSamuel OrtizCloud Hypervisor is implemented in [Rust](https://www.rust-lang.org/) and is based on the [rust-vmm](https://github.com/rust-vmm) crates.
36919226f3SSamuel Ortiz
37919226f3SSamuel Ortiz## Objectives
38919226f3SSamuel Ortiz
39919226f3SSamuel Ortiz### High Level
40919226f3SSamuel Ortiz
41919226f3SSamuel Ortiz* KVM and KVM only based
42919226f3SSamuel Ortiz* Minimal emulation
43919226f3SSamuel Ortiz* Low latency
44919226f3SSamuel Ortiz* Low memory footprint
45919226f3SSamuel Ortiz* Low complexity
46919226f3SSamuel Ortiz* High performance
47919226f3SSamuel Ortiz* Small attack surface
48919226f3SSamuel Ortiz* 64-bit support only
49919226f3SSamuel Ortiz* Build time configurable CPU, memory, PCI and NVDIMM hotplug
50919226f3SSamuel Ortiz* Machine to machine migration
51919226f3SSamuel Ortiz
52919226f3SSamuel Ortiz### Architectures
53919226f3SSamuel Ortiz
54919226f3SSamuel Ortiz`cloud-hypervisor` only supports the `x86-64` CPU architecture for now.
55919226f3SSamuel Ortiz
56919226f3SSamuel OrtizWe're planning to add support for the `AArch64` architecture in the future.
57919226f3SSamuel Ortiz
58919226f3SSamuel Ortiz### Guest OS
59919226f3SSamuel Ortiz* `64-bit Linux`
60919226f3SSamuel Ortiz
61919226f3SSamuel OrtizSupport for *modern* 64-bit Windows guest is being evaluated.
62919226f3SSamuel Ortiz
63919226f3SSamuel Ortiz# 2. Getting Started
64919226f3SSamuel Ortiz
65919226f3SSamuel OrtizWe create a folder to build and run `cloud-hypervisor` at `$HOME/cloud-hypervisor`
66919226f3SSamuel Ortiz
67919226f3SSamuel Ortiz```shell
68919226f3SSamuel Ortiz$ export CLOUDH=$HOME/cloud-hypervisor
69919226f3SSamuel Ortiz$ mkdir $CLOUDH
70919226f3SSamuel Ortiz```
71919226f3SSamuel Ortiz
72919226f3SSamuel Ortiz## Clone and build
73919226f3SSamuel Ortiz
74919226f3SSamuel OrtizFirst you need to clone and build the cloud-hypervisor repo:
75919226f3SSamuel Ortiz
76919226f3SSamuel Ortiz```shell
77919226f3SSamuel Ortiz$ pushd $CLOUDH
788ec89bc8SRob Bradford$ git clone https://github.com/cloud-hypervisor/cloud-hypervisor.git
79919226f3SSamuel Ortiz$ cd cloud-hypervisor
80919226f3SSamuel Ortiz$ cargo build --release
81919226f3SSamuel Ortiz
82919226f3SSamuel Ortiz# We need to give the cloud-hypervisor binary the NET_ADMIN capabilities for it to set TAP interfaces up on the host.
83919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./target/release/cloud-hypervisor
84919226f3SSamuel Ortiz
85919226f3SSamuel Ortiz$ popd
86919226f3SSamuel Ortiz```
87919226f3SSamuel Ortiz
88919226f3SSamuel OrtizThis will build a `cloud-hypervisor` binary under `$CLOUDH/cloud-hypervisor/target/release/cloud-hypervisor`.
89919226f3SSamuel Ortiz
908676759cSSamuel Ortiz### Containerized builds and tests
918676759cSSamuel Ortiz
928676759cSSamuel OrtizIf you want to build and test Cloud Hypervisor without having to install all the
938676759cSSamuel Ortizrequired dependencies (The rust toolchain, cargo tools, etc), you can also use
948676759cSSamuel OrtizCloud Hypervisor's development script: `dev_cli.sh`. Please note that upon its
958676759cSSamuel Ortizfirst invocation, this script will pull a fairly large container image.
968676759cSSamuel Ortiz
978676759cSSamuel OrtizFor example, to build the Cloud Hypervisor release binary:
988676759cSSamuel Ortiz
998676759cSSamuel Ortiz```shell
1008676759cSSamuel Ortiz$ pushd $CLOUDH
1018676759cSSamuel Ortiz$ cd cloud-hypervisor
1028676759cSSamuel Ortiz$ ./scripts/dev_cli.sh build --release
1038676759cSSamuel Ortiz```
1048676759cSSamuel Ortiz
1058676759cSSamuel OrtizWith `dev_cli.sh`, one can also run the Cloud Hypervisor CI locally. This can be
1068676759cSSamuel Ortizvery convenient for debugging CI errors without having to fully rely on the
1078676759cSSamuel OrtizCloud Hypervisor CI infrastructure.
1088676759cSSamuel Ortiz
1098676759cSSamuel OrtizFor example, to run the Cloud Hypervisor unit tests:
1108676759cSSamuel Ortiz
1118676759cSSamuel Ortiz```shell
1123bf46d4cSBo Chen$ ./scripts/dev_cli.sh tests --unit
1138676759cSSamuel Ortiz```
1148676759cSSamuel Ortiz
1158676759cSSamuel OrtizRun the `./scripts/dev_cli.sh --help` command to view all the supported
1168676759cSSamuel Ortizdevelopment script commands and their related options.
1178676759cSSamuel Ortiz
118919226f3SSamuel Ortiz## Run
119919226f3SSamuel Ortiz
120919226f3SSamuel OrtizYou can run a guest VM by either using an existing cloud image or booting into your own kernel and disk image.
121919226f3SSamuel Ortiz
122919226f3SSamuel Ortiz### Cloud image
123919226f3SSamuel Ortiz
1249900daacSRob Bradford`cloud-hypervisor` supports booting disk images containing all needed
1259900daacSRob Bradfordcomponents to run cloud workloads, a.k.a. cloud images.  To do that we rely on
1269900daacSRob Bradfordthe [Rust Hypervisor
1278ec89bc8SRob BradfordFirmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware) project to provide
1289900daacSRob Bradfordan ELF
129919226f3SSamuel Ortizformatted KVM firmware for `cloud-hypervisor` to directly boot into.
130919226f3SSamuel Ortiz
131a3342bdbSSebastien BoeufWe need to get the latest `rust-hypervisor-firmware` release and also a working cloud image. Here we will use a Ubuntu image:
132919226f3SSamuel Ortiz
133919226f3SSamuel Ortiz```shell
134919226f3SSamuel Ortiz$ pushd $CLOUDH
135a3342bdbSSebastien Boeuf$ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
136a3342bdbSSebastien Boeuf$ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-amd64.img focal-server-cloudimg-amd64.raw
13792a62d80SWei Liu$ wget https://github.com/cloud-hypervisor/rust-hypervisor-firmware/releases/download/0.2.8/hypervisor-fw
138919226f3SSamuel Ortiz$ popd
139919226f3SSamuel Ortiz```
140919226f3SSamuel Ortiz
141919226f3SSamuel Ortiz```shell
142919226f3SSamuel Ortiz$ pushd $CLOUDH
143919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
144919226f3SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
145919226f3SSamuel Ortiz	--kernel ./hypervisor-fw \
146a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
147e8e21aebSSamuel Ortiz	--cpus boot=4 \
14800df79a5SSamuel Ortiz	--memory size=1024M \
149919226f3SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
150919226f3SSamuel Ortiz	--rng
151919226f3SSamuel Ortiz$ popd
152919226f3SSamuel Ortiz```
153919226f3SSamuel Ortiz
1545652cc7aSSebastien BoeufMultiple arguments can be given to the `--disk` parameter.
1559900daacSRob Bradford
156919226f3SSamuel Ortiz### Custom kernel and disk image
157919226f3SSamuel Ortiz
158919226f3SSamuel Ortiz#### Building your kernel
159919226f3SSamuel Ortiz
1609900daacSRob Bradford`cloud-hypervisor` also supports direct kernel boot into a `vmlinux` ELF kernel
161d5d40537SRob Bradfordimage. In order to support virtio-fs and virtio-iommu we have our own development branch. You are of course able to use your own kernel but these instructions will continue with the version that we develop and test against.
162d5d40537SRob Bradford
163d5d40537SRob BradfordTo build the kernel:
164919226f3SSamuel Ortiz
165919226f3SSamuel Ortiz```shell
166919226f3SSamuel Ortiz
167d5d40537SRob Bradford# Clone the Cloud Hypervisor Linux branch
168919226f3SSamuel Ortiz$ pushd $CLOUDH
16903398532SSebastien Boeuf$ git clone --depth 1 https://github.com/cloud-hypervisor/linux.git -b virtio-fs-virtio-iommu-virtio-mem-5.6-rc4 linux-cloud-hypervisor
170d5d40537SRob Bradford$ pushd linux-cloud-hypervisor
171919226f3SSamuel Ortiz
172919226f3SSamuel Ortiz# Use the cloud-hypervisor kernel config to build your kernel
173df2570a4SSebastien Boeuf$ cp $CLOUDH/cloud-hypervisor/resources/linux-config .config
174919226f3SSamuel Ortiz$ make bzImage -j `nproc`
175919226f3SSamuel Ortiz$ popd
176919226f3SSamuel Ortiz```
177919226f3SSamuel Ortiz
178919226f3SSamuel OrtizThe `vmlinux` kernel image will then be located at `linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin`.
179919226f3SSamuel Ortiz
180919226f3SSamuel Ortiz#### Disk image
181919226f3SSamuel Ortiz
182a3342bdbSSebastien BoeufFor the disk image, we will use a Ubuntu cloud image that contains a root partition:
183919226f3SSamuel Ortiz
184919226f3SSamuel Ortiz```shell
185919226f3SSamuel Ortiz$ pushd $CLOUDH
186a3342bdbSSebastien Boeuf$ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
187a3342bdbSSebastien Boeuf$ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-amd64.img focal-server-cloudimg-amd64.raw
188919226f3SSamuel Ortiz$ popd
189919226f3SSamuel Ortiz```
190919226f3SSamuel Ortiz
191919226f3SSamuel Ortiz#### Booting the guest VM
192919226f3SSamuel Ortiz
193a3342bdbSSebastien BoeufNow we can directly boot into our custom kernel and make it use the Ubuntu root partition.
194919226f3SSamuel OrtizIf we want to have 4 vCPUs and 512 MBytes of memory:
195919226f3SSamuel Ortiz
196919226f3SSamuel Ortiz```shell
197919226f3SSamuel Ortiz$ pushd $CLOUDH
198919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
199919226f3SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
200919226f3SSamuel Ortiz	--kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin \
201a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
202a3342bdbSSebastien Boeuf	--cmdline "console=hvc0 root=/dev/vda1 rw" \
203e8e21aebSSamuel Ortiz	--cpus boot=4 \
20446eaea16SSamuel Ortiz	--memory size=1024M \
20546eaea16SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
20646eaea16SSamuel Ortiz	--rng
20746eaea16SSamuel Ortiz```
20846eaea16SSamuel Ortiz
20946eaea16SSamuel OrtizThe above example use the `virtio-console` device as the guest console, and this
21046eaea16SSamuel Ortizdevice may not be enabled soon enough by the guest kernel to get early kernel
21146eaea16SSamuel Ortizdebug messages.
21246eaea16SSamuel Ortiz
21346eaea16SSamuel OrtizWhen in need for earlier debug messages, using the legacy serial device based
21446eaea16SSamuel Ortizconsole is preferred:
21546eaea16SSamuel Ortiz
21646eaea16SSamuel Ortiz```
21746eaea16SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
21846eaea16SSamuel Ortiz	--kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin \
21946eaea16SSamuel Ortiz	--console off \
22046eaea16SSamuel Ortiz	--serial tty \
221a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
222a3342bdbSSebastien Boeuf	--cmdline "console=ttyS0 root=/dev/vda1 rw" \
223e8e21aebSSamuel Ortiz	--cpus boot=4 \
22400df79a5SSamuel Ortiz	--memory size=1024M \
225919226f3SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
226919226f3SSamuel Ortiz	--rng
227919226f3SSamuel Ortiz```
228919226f3SSamuel Ortiz
229919226f3SSamuel Ortiz# 3. Status
230919226f3SSamuel Ortiz
231919226f3SSamuel Ortiz`cloud-hypervisor` is in a very early, pre-alpha stage. Use at your own risk!
232919226f3SSamuel Ortiz
233a3342bdbSSebastien BoeufAs of 2020-07-02, the following cloud images are supported:
2341e97d141SRob Bradford* [Ubuntu Bionic](https://cloud-images.ubuntu.com/bionic/current/) (cloudimg)
235c790bba9SRob Bradford* [Ubuntu Focal](https://cloud-images.ubuntu.com/focal/current/) (cloudimg)
2361e97d141SRob Bradford
2371e97d141SRob BradfordDirect kernel boot to userspace should work with most rootfs.
238919226f3SSamuel Ortiz
2396444e29bSRob Bradford## Hot Plug
2406444e29bSRob Bradford
2416444e29bSRob BradfordThis [document](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/hotplug.md) details how to add devices to
2426444e29bSRob Bradforda running VM. Currently only CPU hot plug is supported.
2436444e29bSRob Bradford
244b55d75eaSSebastien Boeuf## Device Model
245b55d75eaSSebastien Boeuf
2468ec89bc8SRob BradfordFollow this [documentation](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/device_model.md).
247b55d75eaSSebastien Boeuf
248919226f3SSamuel Ortiz## TODO
249919226f3SSamuel Ortiz
250919226f3SSamuel OrtizWe are not tracking the `cloud-hypervisor` TODO list from a specific git tracked file but through
2518ec89bc8SRob Bradford[github issues](https://github.com/cloud-hypervisor/cloud-hypervisor/issues/new) instead.
252919226f3SSamuel Ortiz
253919226f3SSamuel Ortiz# 4. `rust-vmm` project dependency
254919226f3SSamuel Ortiz
255919226f3SSamuel OrtizIn order to satisfy the design goal of having a high-performance, security-focused hypervisor the decision
256919226f3SSamuel Ortizwas made to use the [Rust](https://www.rust-lang.org/) programming language.
257919226f3SSamuel OrtizThe language's strong focus on memory and thread safety makes it an ideal candidate for implementing VMMs
258919226f3SSamuel Ortiz
259919226f3SSamuel OrtizInstead of implementing the VMM components from scratch, `cloud-hypervisor` is importing the [rust-vmm](https://github.com/rust-vmm)
260919226f3SSamuel Ortizcrates, and sharing code and architecture together with other VMMs like e.g. Amazon's [Firecracker](https://firecracker-microvm.github.io/)
261919226f3SSamuel Ortizand Google's [crosvm](https://chromium.googlesource.com/chromiumos/platform/crosvm/).
262919226f3SSamuel Ortiz
263919226f3SSamuel Ortiz`cloud-hypervisor` embraces the rust-vmm project goals, which is to be able to share and re-use
264919226f3SSamuel Ortizas many virtualization crates as possible. As such, the `cloud-hypervisor` relationship with the rust-vmm
265919226f3SSamuel Ortizproject is twofold:
266919226f3SSamuel Ortiz
267919226f3SSamuel Ortiz1. It will use as much of the rust-vmm code as possible. Any new rust-vmm crate that's relevant to the project
268919226f3SSamuel Ortiz   goals will be integrated as soon as possible.
269919226f3SSamuel Ortiz2. As it is likely that the rust-vmm project will lack some of the features that `cloud-hypervisor` needs (e.g. ACPI,
270919226f3SSamuel Ortiz   VFIO, vhost-user, etc), we will be using the `cloud-hypervisor` VMM to implement and test them, and contribute them
271919226f3SSamuel Ortiz   back to the rust-vmm project.
272919226f3SSamuel Ortiz
273919226f3SSamuel Ortiz## Firecracker and crosvm
274919226f3SSamuel Ortiz
275919226f3SSamuel OrtizA large part of the `cloud-hypervisor` code is based on either the Firecracker or the crosvm projects implementations.
276919226f3SSamuel OrtizBoth of these are VMMs written in Rust with a focus on safety and security, like Cloud Hypervisor.
277919226f3SSamuel Ortiz
278919226f3SSamuel OrtizHowever we want to emphasize that the Cloud Hypervisor project is neither a fork nor a reimplementation of any of those
279919226f3SSamuel Ortizprojects. The goals and use cases we're trying to meet are different.
280919226f3SSamuel OrtizWe're aiming at supporting cloud workloads, i.e. those modern, full Linux distribution images currently being run by
281919226f3SSamuel OrtizCloud Service Provider (CSP) tenants.
282919226f3SSamuel Ortiz
283919226f3SSamuel OrtizOur primary target is not to support client or serverless use cases, and as such our code base already diverges
284919226f3SSamuel Ortizfrom the crosvm and Firecracker ones. As we add more features to support our use cases, we believe that the divergence
285919226f3SSamuel Ortizwill increase while at the same time sharing as much of the fundamental virtualization code through the rust-vmm project
286919226f3SSamuel Ortizcrates as possible.
287919226f3SSamuel Ortiz
288919226f3SSamuel Ortiz# 5. Community
289919226f3SSamuel Ortiz
290*7bfe87b7SSamuel OrtizThe Cloud Hypervisor project follows the governance, and community guidelines described in
291*7bfe87b7SSamuel Ortizthe [Community](https://github.com/cloud-hypervisor/community) repository.
292*7bfe87b7SSamuel Ortiz
293*7bfe87b7SSamuel Ortiz## Contribute
294*7bfe87b7SSamuel Ortiz
295919226f3SSamuel OrtizWe are working on building a global, diverse and collaborative community around the Cloud Hypervisor project.
296919226f3SSamuel OrtizAnyone who is interested in [contributing](CONTRIBUTING.md) to the project is welcome to participate.
297919226f3SSamuel Ortiz
298919226f3SSamuel OrtizWe believe that contributing to a open source project like Cloud Hypervisor covers a lot more than just sending
299919226f3SSamuel Ortizcode. Testing, documentation, pull request reviews, bug reports, feature requests, project improvement suggestions,
300919226f3SSamuel Ortizetc, are all equal and welcome means of contribution. See the [CONTRIBUTING](CONTRIBUTING.md) document for more details.
301919226f3SSamuel Ortiz
302919226f3SSamuel Ortiz## Join us
303919226f3SSamuel Ortiz
3042e0f1c2aSSamuel OrtizGet an [invite to our Slack channel](https://join.slack.com/t/cloud-hypervisor/shared_invite/enQtNjY3MTE3MDkwNDQ4LWQ1MTA1ZDVmODkwMWQ1MTRhYzk4ZGNlN2UwNTI3ZmFlODU0OTcwOWZjMTkwZDExYWE3YjFmNzgzY2FmNDAyMjI)
305919226f3SSamuel Ortizand [join us on Slack](https://cloud-hypervisor.slack.com/).
306919226f3SSamuel Ortiz
307919226f3SSamuel Ortiz# 6. Security
308919226f3SSamuel Ortiz
309919226f3SSamuel Ortiz**Reporting a Potential Security Vulnerability**: If you have discovered
310919226f3SSamuel Ortizpotential security vulnerability in this project, please send an e-mail to
311919226f3SSamuel Ortizsecure@intel.com. For issues related to Intel Products, please visit
312919226f3SSamuel Ortizhttps://security-center.intel.com.
313919226f3SSamuel Ortiz
314919226f3SSamuel OrtizIt is important to include the following details:
315919226f3SSamuel Ortiz  - The projects and versions affected
316919226f3SSamuel Ortiz  - Detailed description of the vulnerability
317919226f3SSamuel Ortiz  - Information on known exploits
318919226f3SSamuel Ortiz
319919226f3SSamuel OrtizVulnerability information is extremely sensitive. Please encrypt all security
320919226f3SSamuel Ortizvulnerability reports using our *PGP key*
321919226f3SSamuel Ortiz
322919226f3SSamuel OrtizA member of the Intel Product Security Team will review your e-mail and
323919226f3SSamuel Ortizcontact you to to collaborate on resolving the issue. For more information on
324919226f3SSamuel Ortizhow Intel works to resolve security issues, see: *Vulnerability Handling
325919226f3SSamuel OrtizGuidelines*
326919226f3SSamuel Ortiz
327919226f3SSamuel OrtizPGP Key: https://www.intel.com/content/www/us/en/security-center/pgp-public-key.html
328919226f3SSamuel Ortiz
329919226f3SSamuel OrtizVulnerability Handling Guidelines: https://www.intel.com/content/www/us/en/security-center/vulnerability-handling-guidelines.html
330