summary refs log tree commit diff
Commit message (Collapse)AuthorAge
...
* gpu_renderer: use GBM inside virglrendererGurchetan Singh2019-08-20
| | | | | | | | | | | | | | | | | | | | | | With YUV support + modifier support coming up, it makes sense to move GBM allocation inside virglrenderer so we can upstream our use cases. In addition, this allows us to use gbm_bo_map(..) for the freecad issue, which would otherwise be resolved through local patches in our graphics drivers. BUG=chromium:906811 TEST=freecad works without Mesa patches Change-Id: I61db5c58a5bc5a79fda3cec8ad6c322fae6acc9e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1725450 Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Auto-Submit: Gurchetan Singh <gurchetansingh@chromium.org>
* Dockerfile: stop tracking virglrenderer masterGurchetan Singh2019-08-20
| | | | | | | | | | | | | | | | | | With crrev.com/c/1745316, the regular ChromeOS build started adding epatches to virglrenderer. Therefore, don't track virglrenderer master for the time being, until we can upstream and/or remove our downstream APIs. BUG=chromium:906811 TEST=docker/wrapped_smoke_test.sh Change-Id: I9567e9286130048fb793fecb4ff3801b7d64ddba Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1758371 Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: David Riley <davidriley@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* ac97: remove duplicated codeFletcher Woodruff2019-08-20
| | | | | | | | | | | | | | | | Crosvm's AC97 device had code that was duplicated between playback and capture stream creation. Abstract that code out so it can be shared. BUG=chromium:968724 TEST=aplay /dev/urandom within container Change-Id: If2fb50a0655656726dd9c6255bc84493e91c04e3 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1749948 Tested-by: Fletcher Woodruff <fletcherw@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org> Commit-Queue: Fletcher Woodruff <fletcherw@chromium.org>
* plugin: switch to using /mnt/empty for rootDmitry Torokhov2019-08-19
| | | | | | | | | | | | | | | We have stopped mounting /var/empty as we have decided that /mnt/empty should be used instead. BUG=chromium:933582,b:139436326 TEST=Start plugin VM. Change-Id: I50bbf9d4a9ebd86d54cb9ecc67891921f46e27e8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1757343 Tested-by: Dmitry Torokhov <dtor@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org> Auto-Submit: Dmitry Torokhov <dtor@chromium.org>
* vfio_sys: Add vfio.h to vfio_sysXiong Zhang2019-08-16
| | | | | | | | | | | | | | | | Import kernel include/uapi/linux/vfio.h, it define ioctl interface. BUG=none TEST=none Change-Id: If8e0dae22cb566ae32dfd61d6f2b147f56727611 Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1580456 Tested-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
* devices: virtio: add copy_config() helper functionDaniel Verkamp2019-08-16
| | | | | | | | | | | | | | | | | | | | | | | Add a new virtio configuration copying function to replace all of the slightly varying read_config() and write_config() implementations in our virtio devices. This replaces a lot of tricky bounds-checking code with a single central implementation, simplifying the devices to a single call to copy_config() in most cases. The balloon device is also changed to represent its config space as a DataInit struct to match most other devices and remove several unwrap() calls. BUG=None TEST=./build_test TEST=Boot vm_kernel+vm_rootfs in crosvm TEST=Start Crostini on nami Change-Id: Ia49bd6dbe609d17455b9562086bc0b24f327be3f Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1749562 Reviewed-by: Dylan Reid <dgreid@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* gpu_renderer: update bindingsGurchetan Singh2019-08-15
| | | | | | | | | | | | | BUG=chromium:906811 TEST=compile Change-Id: Ie4ee8df9e944a4b6bf148dfa04ab7946992a0351 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1725449 Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Auto-Submit: Gurchetan Singh <gurchetansingh@chromium.org>
* devices: use libc::exit instead of process::exitStephen Barber2019-08-14
| | | | | | | | | | | | | | | | | | | | We don't always shut down the worker threads cleanly, which can lead to a race when crosvm is exiting. Worker threads that attempt logging to stderr may fail an expect(), panic, and then panic again trying to write to stderr causing SIGILL. Work around this issue for now by using libc's exit, which won't run any rust-specific cleanup. BUG=chromium:978319,chromium:992494 TEST=crosvm shuts down without SIGILL/core dumps Change-Id: I8a99ce8a34220afdf503402d44721a9bea5ec460 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1746830 Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Stephen Barber <smbarber@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
* data_model: allow reading structs from io::ReadDaniel Verkamp2019-08-14
| | | | | | | | | | | | | | Add a from_reader() function that allows reading a DataInit type from a std::io::Read stream. BUG=None TEST=./build_test Change-Id: Iaacae489db2c265d6b1a9af6e18c11c9e6efe354 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1737723 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* devices: virtio: block: use descriptor chain utilsDaniel Verkamp2019-08-13
| | | | | | | | | | | | | | | | | | | Rewrite the virtio block device to use the descriptor Reader/Writer interfaces - this greatly simplifes the block device code. This also lets the block device handle arbitrary descriptor layouts, since the descriptor reader/writer handles that transparently for us. BUG=chromium:990546 TEST=./build_test TEST=Boot crosvm with vm_kernel+vm_rootfs on workstation TEST=Boot full Crostini environment on nami Change-Id: Ie9a2ba70a6c7ed0ae731660fd991fb88242e275f Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1721371 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Stephen Barber <smbarber@chromium.org>
* devices: virtio: make create_descriptor_chain pubDaniel Verkamp2019-08-13
| | | | | | | | | | | | | | Allow use of this helper function in other virtio devices that want to write virtio descriptor chains as part of their tests. BUG=chromium:990546 TEST=./build_test Change-Id: Ib986646dc36b6406c88f20950586e1c665adf167 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1732851 Reviewed-by: Stephen Barber <smbarber@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* devices: virtio: add volatile read/write for desc chainsDaniel Verkamp2019-08-13
| | | | | | | | | | | | | | This will allow streaming data between a FileReadWriteVolatile and the descriptor chain Reader/Writer types. BUG=chromium:990546 TEST=./build_test Change-Id: Idc97ce99dd1cc340444298f705df4f12e339095d Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1721370 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* devices: virtio: add seek() for descriptor chainsDaniel Verkamp2019-08-13
| | | | | | | | | | | | | | This allows moving the read/write cursor around within a chain of descriptors through the standard io::Seek interface. BUG=chromium:990546 TEST=./build_test Change-Id: I26ed368d3c7592188241a343dfeb922f3423d935 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1721369 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* devices: virtio: add Error type for descriptorsDaniel Verkamp2019-08-13
| | | | | | | | | | | | | | | | Add an error type to describe descriptor Errors in more detail. This lets us return a more accurate error in a later CL in this chain by adding a VolatileMemoryError variant. BUG=chromium:990546 TEST=./build_test Change-Id: I08680d0cb64bfc3667bac7b2ad8a8bc0e78e8058 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1733988 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* Fix compiling warnings in test codeJianxun Zhang2019-08-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change fixes two small warnings in smoke test: Compiling crosvm_plugin v0.17.0 (/platform/crosvm/crosvm_plugin) warning: unused import: `std::mem::size_of` --> devices/src/virtio/input/event_source.rs:292:9 | 292 | use std::mem::size_of; | ^^^^^^^^^^^^^^^^^ | = note: #[warn(unused_imports)] on by default warning: variable does not need to be mutable --> devices/src/virtio/input/event_source.rs:385:13 | 385 | let mut evt_opt = source.pop_available_event(); | ----^^^^^^^ | | | help: remove this `mut` | = note: #[warn(unused_mut)] on by default Compiling arch v0.1.0 (/platform/crosvm/arch) BUG=None TEST=./wrapped_smoke_test.sh Pass smoke test. The 2 warnings disappear in the output. Change-Id: Ib4de48e9586e80087e30411e225265554d5e7a11 Signed-off-by: Jianxun Zhang <jianxun.zhang@intel.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1742921 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* crosvm: add x-display argument for choosing the X11 gpu displayZach Reizner2019-08-08
| | | | | | | | | | | | TEST=cargo run -- run --gpu --x-display :0 BUG=None Change-Id: I76b4b33a6b14cb6fad322ffa95f00cce976f81a3 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1670550 Reviewed-by: Zach Reizner <zachr@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* docker: support passing extra arguments to scriptsJianxun Zhang2019-08-07
| | | | | | | | | | | | | | | | | | | One of the usages is to specify proxy setting so that these scripts can download packages behind proxies. It looks cleaner and more flexible than tweaking the docker file that's checked in the repo. BUG=None TEST=run commands behind a network proxy ./build_crosvm_base.sh --build-arg http_proxy --build-arg https_proxy ./build_crosvm.sh --build-arg http_proxy --build-arg https_proxy ./wrapped_smoke_test.sh -e http_proxy -e https_proxy Change-Id: Id3729a1343b12c1c7553e047701f770620e3c975 Signed-off-by: Jianxun Zhang <jianxun.zhang@intel.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1737540 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* usb: handle transfer errors after port is detachedTomasz Jeznach2019-08-07
| | | | | | | | | | | | | | | | | | When USB device is detached from kernel driver there might be multiple pending USB transfers enqued, each completing with TransferStatus::NoDevice. Once backend device is detached from system it's ok to ignore subsequent detach request errors in transfer completion handler. BUG=chromium:987500 TEST=ADB USB device attach/detach cycles with active adb service. Change-Id: I4026e68df860c483973f51f9787bf3d48d2716b3 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1737471 Tested-by: Tomasz Jeznach <tjeznach@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Tomasz Jeznach <tjeznach@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* devices: fix virtio-queue range checkJorge E. Moreira2019-08-07
| | | | | | | | | | | | | | | | | The check for validity of a DescriptorChain needs to ensure that self.len bytes starting from self.addr are valid valid guest memory addresses. The last byte of that range (assuming self.len > 0) is self.addr + self.len - 1. BUG=b/138459777 TEST=run cuttlefish locally with 4.19 kernel Change-Id: I2eb6e70e099b3849ac1f6cdd0dfeed092c2a2b02 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1728481 Reviewed-by: Dylan Reid <dgreid@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Jorge Moreira Broche <jemoreira@google.com> Auto-Submit: Jorge Moreira Broche <jemoreira@google.com>
* split crosvm into a library and a main "crosvm" binaryZach Reizner2019-08-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change has 3 parts: - Modify the Cargo.toml to point at the bin and the lib source. - Move modules and Config struct into the lib source - Fix the argument/plugins module's doc comments which had never been tested. The motivation for this change is to make testing crosvm's major functionality (booting guest kernels, emulating hardware, etc) easier to do from a cargo test. Being able to launce a crosvm config via the API instead of the binary's command line will be possible with this change. A side benefit is that this also enables doc tests in the lib side of crosvm. The doc tests in binaries are not run due to a limitation in how they get tested by cargo. TEST=cargo test ./build_test kokoro/kokoro_simulator.sh emerge crosvm BUG=None Change-Id: I9d4b3a24231b895e8dfaf9e7b0f2b33350772041 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1730333 Reviewed-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Zach Reizner <zachr@chromium.org>
* Allow to connect standard input to a serial port other than the guest consoleJorge E. Moreira2019-08-03
| | | | | | | | | | | | | | | | | | | | | Before this change, setting console=true on a serial port caused that port to be the one connected to the crosvm process' standard input. By adding an extra 'stdin' argument to the serial parameters it's possible to make those concepts independent. Just as with the console argument, stdin defaults to serial port 1 (ttyS0) when not provided and it's possible to set no serial port connected to stdin (or set as the console) by defining the first serial port without the stdin (console) argument. BUG=b/138616941 TEST=boot debian guest in debian host, boot cuttlefish in debian host Change-Id: I7273e6860218521073df93a4ad71e31c7da522a5 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1731139 Reviewed-by: Dylan Reid <dgreid@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Auto-Submit: Jorge Moreira Broche <jemoreira@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Zach Reizner <zachr@chromium.org>
* gpu: Add sandboxing support for pvr.David Riley2019-08-01
| | | | | | | | | | | | | BUG=chromium:892280 TEST=glxgears with virtio-gpu on hana Change-Id: Ib92b21c124e30eacb3fc28558e2eb5d8d4a92567 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1717739 Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: David Riley <davidriley@chromium.org> Commit-Queue: David Riley <davidriley@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org> Auto-Submit: David Riley <davidriley@chromium.org>
* gpu: Add sandboxing support for mali/ARM.David Riley2019-08-01
| | | | | | | | | | | | | | | | ARM platforms have different library locations and also required GPU devices to be availble to the GPU process. BUG=chromium:892280 TEST=glxgears with virtio-gpu on kevin and nami Change-Id: If1baeb1edda76d057e88ab5e88ce22f02e5d30a0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1717738 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: David Riley <davidriley@chromium.org> Commit-Queue: David Riley <davidriley@chromium.org> Auto-Submit: David Riley <davidriley@chromium.org>
* gpu_renderer: Make eglDebugMessageControlKHR usage optional.David Riley2019-08-01
| | | | | | | | | | | | | BUG=chromium:892280 TEST=glxgears with virtio-gpu on kevin and nami Change-Id: I2158f4fe3411006ce5498b01d12ca627aa985f53 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1717737 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: David Riley <davidriley@chromium.org> Commit-Queue: David Riley <davidriley@chromium.org> Auto-Submit: David Riley <davidriley@chromium.org>
* ac97: Fix device real time priority issuepaulhsia2019-08-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | - Add allow sched_setscheduler call in seccomp policy - Change the real time priority constant AUDIO_THREAD_RTPRIO to 10 to match all other clients' priority. Run the following commands to test 1. ulimit -r 10 2. crosvm run -r ./vm_rootfs.img -c 1 -m 1024 -s /run --cid 5 --host_ip \ 100.115.92.25 --netmask 255.255.255.252 --cras-audio \ --params="snd_intel8x0.inside_vm=1 snd_intel8x0.ac97_clock=48000" \ --mac d2:47:f7:c5:9e:53 ./vm_kernel 3. aplay -Dhw:0,0 -f dat /dev/zero 4. ps -AT -o comm,rtprio | grep crosvm should see a thread running with rtprio=10 BUG=chromium:983533 BUG=b:138262556 TEST=Test with eve (x86_64) and bob (arm) Change-Id: Idc3711d03d716741f7cefd9a89b14ae4c20c2033 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1729089 Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Chih-Yang Hsia <paulhsia@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org> Commit-Queue: Chih-Yang Hsia <paulhsia@chromium.org>
* qcow: bounds check the refcount table offset and sizeDylan Reid2019-07-31
| | | | | | | | | | | | | | | | | If the header puts the refcount table outside the file size or if it specifies a table much larger than needed, fail to open the file. These might not be hard qcow errors, but they are situations that crosvm will never encounter. BUG=986061 TEST=fuzzer with new test cases completes in less than 5 seconds. Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: If048c96f6255ca81740e20f3f4eb7669467dbb7b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1716365 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* rust-toolchain: upgrade to Rust 1.36.0Daniel Verkamp2019-07-30
| | | | | | | | | | | | | | Update the rust-toolchain file and Docker image used in kokoro to match the Chrome OS toolchain. BUG=None TEST=docker/wrapped_smoke_test.sh Change-Id: I95cbf9bcaadd49b8476f2829bc75958dbea304e3 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1724850 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* sys_util: drop redundant empty return typeDaniel Verkamp2019-07-30
| | | | | | | | | | | | | | | | | | | | | rustfmt incorrectly formats the `handler` parameter in register_signal_handler in a way that actually breaks compilation. This bug has been reported upstream already, but it is not fixed yet on the version of rustfmt available with stable rust: https://github.com/rust-lang/rustfmt/issues/3673 However, the empty return type can just be omitted in this case, which avoids the rustfmt bug. BUG=None TEST=`bin/fmt --check` passes with Rust 1.36.0 Change-Id: I75c49c66f1db9cb6ae73cc0f6f3e66351176c474 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1724849 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* seccomp: add sendto, writev, and readv to common seccomp policiesZach Reizner2019-07-27
| | | | | | | | | | | | | | | Using syslog from glibc will use some syscalls we haven't seen before, leading to the process getting killed. This change fixes that. TEST=use syslog from C BUG=chromium:988082 Change-Id: I4cfb317a8faf70188995487f4fa844229683d6d1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1721616 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* gpu_display: fix use after free for the wayland socket pathZach Reizner2019-07-27
| | | | | | | | | | | | | | | | | | | | | | Using .map in the way it was caused the CString to get moved into the closure and then dropped by that closure. The returned pointer is then used in dwl_context_setup after it was freed by the drop. This change fixes that first by using .as_ref() before calling .map to prevent the move. As an additional safeguard, some optional types were added to the closure to make sure a reference to the CString was being handled instead of a moved CString. TEST=vmc start --enable-gpu termina BUG=chromium:988082 Change-Id: I58c2c002f08688ecd85715d9cd45085dffb32457 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1721615 Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Auto-Submit: Zach Reizner <zachr@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org>
* gpu_display: add X11 backendZach Reizner2019-07-25
| | | | | | | | | | | | | | This change adds an X11 backend to the gpu_display crate. With this addition, the virtio-gpu device can display to traditional linux desktops that only have X11 output. Change-Id: I86c80cac91ca5bdc97588194a44040273ae69385 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1591572 Reviewed-by: Stéphane Marchesin <marcheu@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Auto-Submit: Zach Reizner <zachr@chromium.org>
* tree-wide: use PollContext::build_with where possibleZach Reizner2019-07-24
| | | | | | | | | | | | | | | | | | The old method of creating a PollContext and calling `add` inside of `and_then` chains was an ugly way handle the Results that can crop up after each call. The `build_with` function is equivalent but operates on a slice which has way less boilerplate. TEST=./build_test BUG=None Change-Id: I8b0d6532680e04c501187397bd211014a2363c25 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1715581 Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Auto-Submit: Zach Reizner <zachr@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org>
* sys_util: poll: add build_with and add_many helper functionsZach Reizner2019-07-24
| | | | | | | | | | | | | | | | | | These functions are wrappers around multiple `add` calls that will fail at the first error. This replaces lots of ugly `and_then`, `and`, and `ok` calls that had been sprinkled around the to initialize a `PollContext`. TEST=cargo test -p sys_util ./build_test BUG=None Change-Id: I69aa1c9ad87677cf220eda57148ff8eb2268bf67 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1715580 Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Auto-Submit: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org>
* sys_util: fix new warning initializing OnceDylan Reid2019-07-24
| | | | | | | | | | "warning: use of deprecated item 'std::sync::ONCE_INIT': the `new` function is now preferred" Change-Id: I029611f2978d5baf3b0bc426ab2285e282708da0 Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1715577 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* tree-wide: Use new trait object syntaxDylan Reid2019-07-24
| | | | | | | | | | | A few places were using the old syntax without `dyn`. Nightly compilers have started warning more aggressively, so fix up the last of those. Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: I4df49b4a27a62acfd8c542cec903e4c5b31bedcc Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1715576 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* tree-wide: update to new inclusive range syntaxDylan Reid2019-07-24
| | | | | | | | | | | 1.38 nightly started warning about using `...` vs `..=`, update to avoid the warning. Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: Ibc3d24c5410b6eed9a1207db21e529ec6a763376 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1715575 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* qcow: Add a zero_cluster method to raw fileDylan Reid2019-07-19
| | | | | | | | | | | Zeroing a cluster will be done from more than one place in qcow.rs soon, add a helper to reduce duplication. Change-Id: Idb40539f8e4ed2338fc84c0d53b37c913f2d90fe Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1697122 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* Refactor input devices interactions with buffers in guest memoryJorge E. Moreira2019-07-17
| | | | | | | | | | | | | | | Input devices were using GuestMemory's read_to_memory and write_from_memory under the (incorrect) assumption that these function used the io::Read and io::Write traits, when they in fact use AsRawFd. BUG=b/137138116 TEST=ran cuttlefish in workstation Change-Id: I7ab1e2d0ab685dd25dcc91e794766c2f210665f7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1700418 Reviewed-by: Dylan Reid <dgreid@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Jorge Moreira Broche <jemoreira@google.com>
* Don't call UNGRAB IOCTL on a socketJorge E. Moreira2019-07-17
| | | | | | | | | | | | | | | That IOCTL only makes sense on devices from /dev/input BUG=none TEST=ran cuttlefish in workstation Change-Id: I1aa1eea1a10db9a4d67337546782e118fceb14ee Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1703209 Tested-by: Jorge Moreira Broche <jemoreira@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Jorge Moreira Broche <jemoreira@google.com> Auto-Submit: Jorge Moreira Broche <jemoreira@google.com> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* devices: gpu: advertise support for capset 3Gurchetan Singh2019-07-16
| | | | | | | | | | | | | | | Useful for prototyping new features. BUG=chromium:924405 TEST=compile Change-Id: Ibdc4a70761493939ca96b92540b9e0cca88c17a8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1650290 Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Auto-Submit: Gurchetan Singh <gurchetansingh@chromium.org>
* tempfile: Unify the two tempdir implementationsDavid Tolnay2019-07-11
| | | | | | | | | | | | | | | | | | | | | | Looks like we ended up with two totally different tempdir implementations: one from CL:520706 and the other from CL:1409705. This CL consolidates them into one implementation. BUG=chromium:974059 TEST=tempfile: cargo test TEST=crosvm: cargo check --all-features TEST=devices: cargo check --tests TEST=sys_util: cargo check --tests TEST=local kokoro TEST=./build_test Cq-Depend: chromium:1574668 Change-Id: Id70e963c9986ed2fc5f160819c4a7f9f16092b3b Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1573227 Tested-by: kokoro <noreply+kokoro@google.com> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
* devices: silence unused code warning in PCIDaniel Verkamp2019-07-10
| | | | | | | | | | | | | | | | Now that nothing uses the PCI-to-PCI bridge device type, the compiler warns that it is never constructed. Mark the PciHeaderType enum to allow this, since the enum is public and could be constructed outside this file. BUG=None TEST=./build_test Change-Id: I6832996c4e00a33cc1ba88d97fede65b226cbfc5 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1691239 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* seccomp: return error from socket for TPM deviceDaniel Verkamp2019-07-09
| | | | | | | | | | | | | | | | | | | | | | | The crosvm TPM process calls ssleay_rand_bytes(), which in some cases attempts to acquire entropy through an EGD ("entropy gathering daemon") - see OpenSSL's RAND_query_egd_bytes(). Attempting to communicate with this daemon by creating a socket would cause the process to exit currently because the syscall whitelist did not allow socket() or connect(). Since we don't have an EGD and don't want to expose it to the sandboxed TPM process anyway, modify the TPM seccomp policy to cause socket() to return an error rather than aborting. BUG=None TEST=`vmc start --software-tpm termina` Change-Id: Ib7c6bceced0f6cbe7199614ece8446aa300cec1e Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1684411 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Vadim Sukhomlinov <sukhomlinov@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* qcow: limit the size of a qcow fileDylan Reid2019-07-09
| | | | | | | | | | | | | | There are many corner cases when handling sizes that approach u64::max. Limit the files to 16TB. BUG=979458 TEST=Added unittest to check large disks fail Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: I93a87c17267ae69102f8d46ced9dbea8c686d093 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1679892 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* qcow: Avoid overflow when taking ceiling of divisionDylan Reid2019-07-09
| | | | | | | | | | | | | | | The extra % operation will be slower, but none of these divisions are in hot paths. They are only used during setup. Many of these operations take untrusted input from the disk file, so need to be hardened. BUG=979458 TEST=unit tests still pass Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: I0e93c73b345faf643da53ea41bde3349d756bdc7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1679891 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* devices: remove use of mem::uninitializedDaniel Verkamp2019-07-09
| | | | | | | | | | | | | | | mem::uninitialized is unsafe, and we already replaced most instances of it with alternate implementations; however, another one slipped in since then. Replace it with Default::default() as a safe alterantive. BUG=None TEST=./build_test Change-Id: Idacdcb0ebe197cc93fba4b15c3dda774bb56e73e Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1691233 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* tempfile: reimplement using libc::mkdtempDaniel Verkamp2019-07-03
| | | | | | | | | | | | | | | | | | POSIX provides a standard mkdtemp() function to securely create a temporary directory; use it rather than reinventing the wheel. This also drops the dependency of tempfile on rand_ish, which will allow easier use of the tempfile implementation outside of crosvm. BUG=chromium:974059 TEST=cargo test -p tempfile Change-Id: I34a226b046dc6f272106988a78d121a24a377f44 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1659971 Tested-by: kokoro <noreply+kokoro@google.com> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* build_test.py: test more packagesDaniel Verkamp2019-07-03
| | | | | | | | | | | | | | | | | Add a number of packages to the build_test.py list so that they are built and tested during local development. build_test.py doesn't run in any automated tests currently, but it's still useful for checking whether everything still builds for multiple architectures without the overhead of a full portage build. BUG=None TEST=./build_test.py Change-Id: I6d3300ae3189311fb6faffaf10c254636adba7c1 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1682925 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* pci: Let device could trap pci config read/writeXiong Zhang2019-07-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently device impliments PciDevice trait, it will return config register to bus trait at pci cfg r/w, then BusDevice trait on behave of device to do actual pci config r/w. But vfio device need to handle the pci config r/w by itself, as vfio device need to transfer this request to kernel. For pci config read, this patch delete PciDevice->config_registers(), and add PciDevice->read_config_register(), then BusDevice-> config_register_read() call PciDevice->read_config_register(), finally Device could trap the PciConfig Read. For pci config write, it is similiar with pci config read. But the common code is moved into PciConfiguration. BUG=none TEST=none Change-Id: Ie6bd3a8c94f523d6fb1ef3d1e97d087bb0407d9f Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1580457 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: Daniel Verkamp <dverkamp@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
* seccomp: whitelist read-only/write-only GPU mappingsGurchetan Singh2019-07-03
| | | | | | | | | | | | | | | minigbm sometimes maps buffer with only PROT_READ or only PROT_WRITE, so allow this. BUG=b:132939420 TEST=glxgears in container Change-Id: Ie5ccd827dd14ee78b999d70287b7165d81c5c85e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1673533 Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>