18ec89bc8SRob Bradford[](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