пятница

[Bug 2067862] Re: remove virtio legacy device make kernel Oops

Hi Matthew Ruffell
First of all, thank you for your response.

If you want to reproduce this issue, you can try the following steps:

1. Boot the Ubuntu 24 system and modify the kernel boot parameters to include virtio_pci.force_legacy=1.
2. Use perf-tools or ftrace to trace the return value of the virtio_pci_legacy_probe function.
3. Insert a virtio network card or disk, and observe the return value of the virtio_pci_legacy_probe function within the guest OS to confirm a successful return of 0x0, indicating that the virtio device has been enabled using virtio_pci_legacy_probe.
4. Remove the network card or disk, and you should be able to reproduce the issue.

I have installed and tested the test kernel you built on Ubuntu 24, and
it's working fine. Additionally, I have also backported the patch from
https://github.com/torvalds/linux/commit/c8fae27d141a32a1624d0d0d5419d94252824498
(virtio-pci
: Check if is_avq is NULL) and compiled the Ubuntu kernel,
which also has no issues.

--
You received this bug notification because you are subscribed to linux
in Ubuntu.
Matching subscriptions: Bgg, Bmail, Nb
https://bugs.launchpad.net/bugs/2067862

Title:
remove virtio legacy device make kernel Oops

Status in linux package in Ubuntu:
Fix Released
Status in linux source package in Noble:
New

Bug description:
In the Ubuntu 24's 6.8.0-31-generic kernel version, the capability
https://github.com/torvalds/linux/commit/fd27ef6b44bec26915c5b2b22c13856d9f0ba17a
(virtio-pci: Introduce admin virtqueue) was added. However, an issue
was overlooked by the upstream community, which is that if the virtio
device is not a modern virtio device, but a legacy virtio device, the
is_avq function pointer is not assigned, resulting in a NULL pointer
for the is_avq function pointer in the virtio_pci_device structure of
the legacy virtio device. When unloading the virtio device, if the
code calls if (vp_dev->is_avq(vdev, vq->index)), the RIP register of
the CPU points to a NULL pointer address.

I have noticed that the kernel community has already included a
related solution, and I hope that the Ubuntu kernel can backport to
support the remove operation for legacy virtio devices:
https://github.com/torvalds/linux/commit/c8fae27d141a32a1624d0d0d5419d94252824498
(virtio-pci: Check if is_avq is NULL).

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2067862/+subscriptions

Комментариев нет:

Отправить комментарий