Commit graph

11248 commits

Author SHA1 Message Date
b4f45de7a3 debug(gpu): add diagnostic logging to build_rutabaga for virgl2 debugging
Log rutabaga configuration, DRM render node accessibility, and
EGL-relevant environment variables during GPU backend initialization.
This helps diagnose why virglrenderer may fail to use hardware
acceleration in standalone vhost-user GPU device mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:48:47 +00:00
31d7be0a6c vmm_vhost: fix SHMEM_MAP protocol feature bit
VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT is assigned bit 20
(0x0010_0000) in the vhost-user spec. Using the same bit for SHMEM_MAP
collides with that spec-defined feature.

Change SHMEM_MAP to bit 21 (0x0020_0000), which is unassigned in the
spec and matches the bit used by vhost-rs for the same feature.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 16:36:52 +00:00
f113d1092d Update git URL for pulseaudio-rs 2026-03-16 17:11:41 +00:00
b847a9d954 feat(vfio): add disable-msix option to hide MSI-X capability from guest
Add a `disable-msix` CLI option for VFIO passthrough devices that hides
the MSI-X capability from the guest VM, forcing fallback to MSI. This
fixes passthrough for devices whose MSI-X table shares a BAR page with
performance-critical registers (e.g., Intel AX210 Wi-Fi).

When enabled, the capability chain walk skips MSI-X initialization and
records chain metadata. Config space reads patch the capability linked
list to skip over MSI-X and zero out its structure. Config space writes
to the hidden MSI-X region are blocked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:38:42 +00:00
77c7a27e8d fix: use Condvar signaling instead of polling while corked in virtio-snd
The cork implementation polled status_mutex every period (~10ms) using
TimerAsync::sleep, causing ~100 wakeups/sec per corked stream. Replace
with a Condvar that is signaled on status changes in start()/stop()/
release_worker(), eliminating all wakeups while corked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 23:49:53 +00:00
acf39cf91d feat: cork PulseAudio streams on pause to reduce CPU wakeups
When the guest VM stops audio playback/capture, the PCM worker was
continuously writing silence to PulseAudio every ~10ms, keeping the
PA mainloop and audio hardware clock active. This adds PulseAudio
stream corking: on pause the stream is corked so the PA server stops
requesting data, and on resume it is uncorked. This eliminates idle
CPU wakeups and improves battery life.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 22:54:07 +00:00
6c0da08597 fix: enforce capture=false by zeroing input devices in virtio-snd
The capture parameter was only wired up for the CRAS backend, so
capture=false still advertised input devices to the guest for PulseAudio
and other backends. Zero out num_input_devices and num_input_streams in
resize_parameters_pcm_device_config when capture is disabled, preventing
input PCM devices from being created regardless of backend.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:18:29 +00:00
a75aa452a6 feat: add --disable-gpu-render-server-sandbox flag
Allow disabling the sandbox for the GPU render server independently
from --disable-sandbox, which disables sandboxing for all devices.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 02:50:44 +00:00
7ff2d31165 fix: allow MADV_HUGEPAGE/MADV_COLLAPSE and prlimit64 in gpu seccomp policy
NVIDIA's driver uses madvise with MADV_HUGEPAGE and MADV_COLLAPSE for
GPU memory (scoped to render server only), and prlimit64 during
initialization (added to gpu_common).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 01:22:40 +00:00
601d42aa36 feat: add crosvm-nvidia package with relaxed mprotect for JIT shaders
NVIDIA's proprietary driver requires PROT_READ|PROT_WRITE|PROT_EXEC
mprotect for JIT shader compilation in the GPU render server. This is
a significant sandbox weakening, so it's offered as a separate flake
package rather than changing the default seccomp policy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:36:01 +00:00
dae0f2e5a3 fix: allow statfs syscall in gpu render server seccomp policy
The NVIDIA driver calls statfs() during Vulkan ICD initialization,
but only fstatfs was permitted, causing a seccomp violation that
crashes virgl_render_server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:11:23 +00:00
81027cdb19 feat: add stream-non-blocking option for unix-stream serial devices
Allow setting UnixStream sockets to non-blocking mode via
stream-non-blocking flag, preventing writes from blocking the serial
device thread when the remote end stops reading.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:01:27 +00:00
304a5c0db6 fix: use guest period size for capture buffer instead of hardcoded latency
The capture stream was ignoring the buffer_size parameter from the guest
and computing its own buffer size from TARGET_LATENCY_MS, causing a size
mismatch in read_data() (e.g. 4104 != 4096) that broke audio capture.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:06:23 +00:00
76a40cc68e fix: set RLIMIT_RTPRIO for snd device via minijail prlimit
The audio thread's attempt to set realtime scheduling priority was
always failing because: (1) setrlimit64 is blocked by the seccomp
policy, and (2) the process runs in a PID namespace which prevents
using rtkit as an alternative.

Fix this by having the parent process set RLIMIT_RTPRIO on the snd
device's jail via minijail's prlimit() support, which operates from
outside the sandbox using the child's real PID. This allows the
existing pthread_setschedparam(SCHED_RR) call to succeed, since
sched_setscheduler is already permitted by the seccomp policy.

Only the snd device process is affected; other device processes do
not receive the elevated rlimit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 17:07:18 +00:00
5ca20a99aa pulseaudio: use appropriate log levels for reactor errors
Update submodule to pick up log level changes: client disconnection
is logged at info instead of error, server errors at warn.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 15:40:30 +00:00
0ea15c74fc feat: add PulseAudio capture (audio input) support
Add real capture support using the pulseaudio-rs RecordStream API,
mirroring the existing playback architecture with reversed data flow.
Extract shared utilities (channel_map_for_channels, TARGET_LATENCY_MS,
StreamParams) into format.rs to avoid duplication. Update --help text
to document the pulse backend and its options.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:51:39 +00:00
063b446cf9 feat: add Wayland security context support
Add support for the wp_security_context_manager_v1 protocol, allowing
crosvm to establish security contexts for Wayland connections from
sandboxed applications.

- Add wayland_security_context crate with protocol implementation
- Add --wayland-security-context CLI option
- Integrate security context setup in Linux system configuration
- Include design documentation and unit tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 23:01:58 +00:00
252122b197 flake.nix: Add devshell with fortify hardening disabled
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 20:04:56 +00:00
094a196cb6 Add --no-timestamps flag to disable timestamps in stderr logs
When specified, log messages printed to stderr will not include
timestamps. Syslog messages always include timestamps regardless
of this flag.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 20:04:52 +00:00
90c4fccf99 Set uid/gid inside the PulseAudio jail based on ownership of socket
When running crosvm as root with a user-owned PulseAudio socket, the
connection would fail because:

1. The jail used default socket paths (based on getuid() which returns 0
   for root) instead of user-specified paths
2. The jail ran as root, which cannot access sockets owned by other users

This fix applies the same pattern used for the GPU device (commit
f1a6b61ac): when running as root, configure the jail to run as the
socket owner's UID/GID so it can access the socket.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 15:19:40 +00:00
f1a6b61ace Set uid/gid inside the GPU jail based on ownership of wayland socket
Fixes running as root connecting to a users wayland socket when using nvidia
drivers.
2026-02-06 19:27:19 +00:00
6ffbd02184 Remove pulseaudio-rs tree, add fork as submodule 2026-02-06 16:44:53 +00:00
396b3cd606 Add PulseAudio backend for virtio-snd
Implement a PulseAudio audio backend as an alternative to CRAS for Linux
desktop environments. This enables crosvm audio output on systems running
PulseAudio without requiring ChromeOS audio infrastructure.

Key components:
- pulse_audio: crosvm device implementing AsyncPlaybackBufferStream with
  push/pull bridge, connection management with auto-reconnect, and sample
  format mapping
- pulseaudio-rs: Pure Rust PulseAudio protocol implementation (third_party)
- seccomp: PulseAudio device policies for sandboxed operation
- Configuration options: pulse_socket_path, pulse_cookie_path,
  pulse_debug_file_output

Features audio_pulse feature flag to enable the backend.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
3b1b5558c4 gitignore: Add .worktrees directory 2026-02-06 16:44:53 +00:00
23f75ca1d6 docs: Add PulseAudio implementation plan
Detailed step-by-step implementation plan with 12 tasks covering:
- Crate structure and error types
- Connection management with auto-reconnect
- StreamSource and AsyncPlaybackBufferStream
- Sample format mapping
- Seccomp policies
- Integration with devices crate and crosvm

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
4545eee6b6 docs: Add PulseAudio audio backend design
Design document for adding PulseAudio playback support using the
pure-Rust pulseaudio-rs library. This replaces the PipeWire approach
which required dlopen() - incompatible with seccomp sandboxing.

Key design decisions:
- Playback only, no capture
- No resampling, pass through to PulseAudio
- Auto-reconnect with exponential backoff (100ms to 30s)
- 40ms latency target
- Self-contained crate for fork maintainability

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
83b0b717a9 Default to nixos-unstable 2026-02-06 16:44:53 +00:00
1902c81e67 Update Cargo.lock to use full rutabaga_gfx
0.1.76-alpha.0 is the normal build. 0.1.76-chromeos (which was in Cargo.lock)
is a lobotomised version that stubs out APIs in an effort to prevent adding
new deps for ChromeOS. `nix build` uses Cargo.lock over Cargo.toml.
2026-02-06 16:44:53 +00:00
d06c1f3872 seccomp: Allow madvise MADV_GUARD_INSTALL for devices
0cd5867197 fixed this for GPU. Now we also
allow it for other device emulation.
2026-02-06 16:44:53 +00:00
dee467b265 flake.nix formatting changes 2026-02-06 16:44:53 +00:00
d49d009bb0 seccomp: Allow madvise MADV_GUARD_INSTALL for GPU
glibc 2.42+ uses MADV_GUARD_INSTALL (Linux 6.13+) in pthread_create for
lightweight stack guard pages. Without this, thread creation fails on
systems with newer glibc.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
4249bfb29c seccomp: Allow setsockopt and sendmmsg for GPU
NVIDIA's EGL driver calls XOpenDisplay during initialization, which
triggers DNS resolution via getaddrinfo. glibc's resolver uses
setsockopt (for ICMP error handling) and sendmmsg (for sending DNS
queries), both of which were blocked by seccomp.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
cfb61ecd65 Make nix build fetch our submodules
Set self.submodules = true.
2026-02-06 16:44:53 +00:00
12b5e5cedd seccomp: Allow madvise MADV_NOHUGEPAGE for GPU
glibc's pthread_create uses madvise(MADV_NOHUGEPAGE) for thread stack
memory management. Without this, the GPU device process crashes during
thread creation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 16:44:53 +00:00
8038881c75 Update version 2026-02-06 16:44:53 +00:00
b500f55b8e seccomp: Allow mknodat and mprotect PROT_EXEC for GPU
The GPU device process needs:
- mknodat: Used by GPU drivers for device node operations
- mprotect with PROT_EXEC: Used by Mesa/drivers for JIT shader compilation

These syscalls were being blocked by seccomp, causing the GPU device
child process to be killed during initialization.
2026-02-06 16:44:53 +00:00
1565deb655 seccomp: Allow sched_get_priority_max and sched_get_priority_min 2026-02-06 16:44:53 +00:00
Thomas Leonard
431d5a6263 Log more information about VIRTIO_GPU_RESP_ERR_UNSPEC 2026-02-04 11:52:21 +00:00
Thomas Leonard
c738b1ef18 Lower log-level for setting the core scheduling
Never works anyway and spams the logs.
2026-02-04 11:52:21 +00:00
Thomas Leonard
b7478908c6 Don't open a graphical console window
Useless (and maybe prevents opening the device for Wayland proxying?).
2026-02-04 11:52:21 +00:00
Thomas Leonard
261d0fc1c5 Fix GPU jail
It was crashing on startup (on NixOS 23.05).
2026-02-04 11:52:21 +00:00
Thomas Leonard
7f2e6e0581 Add Nix build rules
Based on nixpkgs.

Note: had to remove unused submodule to aviod this error:

    fatal: '.../crosvm/third_party/vmm_vhost' does not appear to be a git repository
2026-02-04 11:52:21 +00:00
recipe-roller
bdb9d8c464 Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (recipe_engine) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8690826643931483953

recipe_engine:
https://chromium.googlesource.com/infra/luci/recipes-py.git/+/318ca7ea4ab1c72d1110abd1da24e70b00e0f0e7
  318ca7e (yuje@google.com)
      Remove references to Python < 3.11

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I170c36c2f58ccc0e91f03f256c078d7176f9f441
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7543654
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-03 20:34:24 -08:00
Cassie Wang
ea32c72919 base: Handle errors during unix system_info calls
BUG=NONE
TEST=./tools/presubmit

Change-Id: Ia528b4dcd478be82db3946ee8ef92b9258d895f0
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7540107
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Cassie Wang <cassiewang@google.com>
2026-02-03 12:56:21 -08:00
recipe-roller
d27cad3b00 Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8690868166018176833

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/ecc6b383b7e2a9e93d167037cc7d55123cb8ddc1
  ecc6b38 (bryner@google.com)
      Clarify the error message when google-java-format is missing.

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I51a386405d58fa5671de89b7c4bd0f5e4f0873cb
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7541557
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-03 09:39:29 -08:00
recipe-roller
51706d8c04 Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (recipe_engine) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8690938630370839569

recipe_engine:
https://chromium.googlesource.com/infra/luci/recipes-py.git/+/54d98e79814b95a7e333fceb0000c06a83158e9c
  54d98e7 (mohrr@google.com)
      Replace "whitelist" with "allowlist"

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I67a0fa60f0adcd2b619b66aafb7c806bb1ea8ae9
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7540105
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-02 14:56:59 -08:00
recipe-roller
8d16e1a158 Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8690946809582128593

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/26a3f8e2cd5837754c0e34fdaacc4b32a81329c4
  26a3f8e (liviurau@google.com)
      Support unpacking zip artifact from GCS dependencies

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I7922d2b207d33e8f9bd3a04a30a0da645fbfe9c9
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7540097
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-02 12:48:12 -08:00
recipe-roller
91f6191bd1 Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8690956247753497505

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/6332e0fb2f483c823d87925061624b2f331f91b2
  6332e0f (gavinmak@google.com)
      Fix Swift presubmit output and clarify formatting instructions

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I2a2e226f6c07dd48236b35d4ae6a79f886e016d0
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7539775
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-02 10:17:27 -08:00
recipe-roller
ef5b92ab5f Roll recipe dependencies (trivial).
This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (depot_tools) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8691019790615004881

depot_tools:
https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/6235028c6b18b73e68f5414f935ec537a25ea51a
  6235028 (thakis@chromium.org)
      Fix typo in diagnostic text

Please check the following references for more information:
- autoroller, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#autoroller
- rollback, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/workflow.md#rollback
- cross-repo dependencies, https://chromium.googlesource.com/infra/luci/recipes-py/+/main/doc/cross_repo.md

Use https://goo.gl/noib3a to file a bug.

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I8972fd239607dc1a39070266d86c98900909a0d1
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7537386
Commit-Queue: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
Bot-Commit: Recipe Roller <recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com>
2026-02-01 17:29:36 -08:00
Pierre-Clément Tosi
f4278e318d devices: Merge DummyDevice into MockDevice
Unify the test device structs without affecting the tests.

Note that this alters the device_id/debug_label of the test device,
which should have no impact on the validity of the test.

BUG=None
TEST=cd devices && cargo test mock && cargo test bus

Change-Id: I62a46ae8bec729c668abd55e312f3798b7918590
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/7221857
Auto-Submit: Pierre-Clément Tosi <ptosi@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2026-01-30 13:24:52 -08:00