blob: 4cd377bdd019e0f5202674bf55987426a46a7c54 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
id = 2805
title = "vhost-device-snd does not report correctly the device conf size"
state = "closed"
created_at = "2025-02-06T18:04:06.905Z"
closed_at = "2025-02-21T23:15:13.433Z"
labels = ["device:virtio"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/2805"
host-os = "Fedora 37"
host-arch = "x86"
qemu-version = "9.2.50 (v9.2.0-1537-gd922088eb4)"
guest-os = "Linux"
guest-arch = "x86"
description = """The vhost-user-snd frontend is incorrectly reporting the size of the device configuration space, which should be based on the features exposed by the device. For example, the `controls` field in the `virtio_snd_config` structure is optional and should only be included in the configuration size if the `VIRTIO_SND_F_CTLS` feature has been negotiated.
This issue became apparent after commit `ab0c7fb2`, where `virtio_snd_config` was updated to include the `controls` field. The vhost-user-snd frontend, relying on this structure, started expecting `sizeof(virtio_snd_config)` when communicating with the backend, regardless of whether the `VIRTIO_SND_F_CTLS` feature was negotiated. As a result, any backend reporting a smaller configuration size—for example, one that does not support controls—cannot communicate with the frontend. We observed this problem in the vhost-device-sound rust-vmm device, which we partially fixed [here](https://github.com/rust-vmm/vhost-device/commit/8e7b7109316e1027548bc91cfcbb4b096b032c24).
This behavior is incorrect because the configuration size should depend on the negotiated features.
I am currently working on patch to fix this."""
reproduce = """1. Run vhost-device-sound
```bash
cargo run --bin vhost-device-sound -- --socket=/tmp/vhost-sound.socket --backend=pipewire
```
2. Run QEMU with the parameters above
3. In the guest run:
```bash
root@syzkaller:~# aplay /usr/share/sounds/alsa/Front_Left.wav
aplay: main:830: audio open error: No such file or directory
```"""
additional = """"""
|