** Description changed:

  [Impact]
  
  Ubuntu 24.04 LTS ships v4l2loopback 0.12.7.
  After the Linux 6.18 API compatibility fixes from LP: #2161037 are applied, 
streaming through a v4l2loopback device on the Noble 7.0 HWE kernel can 
hard-freeze the system.
  
  The output DQBUF path reads and reorders dev->outbufs_list without holding 
dev->lock.
  The concurrent output QBUF path modifies the same list under dev->lock.
  This race can corrupt the kernel list while an output buffer is queued and 
dequeued concurrently.
  
  A controlled Noble VM test reproduced the underlying corruption on 
7.0.0-28-generic.
  The unpatched DQBUF path produced 112 kernel warnings, including:
  
-     list_add corruption. prev->next should be next
-     WARNING: lib/list_debug.c:32 at __list_add_valid_or_report
-     buffer_written
-     vidioc_qbuf
+     list_add corruption. prev->next should be next
+     WARNING: lib/list_debug.c:32 at __list_add_valid_or_report
+ 
+ call trace included.
+ 
+     buffer_written
+     vidioc_qbuf
  
  The fix takes the existing dev->lock while vidioc_dqbuf() reads and
  rotates dev->outbufs_list.
  
  [Test Plan]
  
  TBD
  
  [Where problems could occur]
  
  If the locking range is wrong or the lock is not released, concurrent
  output DQBUF and QBUF operations can either hang or produce list-
  corruption warnings and broken output streaming.
  
  [Other Info]
  
  Fixed upstream in v4l2loopback 0.13.0 by
  
https://github.com/v4l2loopback/v4l2loopback/commit/d9277249064a04cee6e3784573cf36162e09bf3e
  mutex lock access to outbufs_list in vidioc_dqbuf
- 
  
  [Original Description]
  
  On Ubuntu 24.04 (Noble) with the HWE 7.0 kernel (7.0.0-28-generic),
  v4l2loopback fails to build with the stock package (see bug #2161037).
  After manually applying a community-suggested compile fix
  
(https://github.com/v4l2loopback/v4l2loopback/issues/669#issuecomment-5011058299)
  for the v4l2_fh_add/v4l2_fh_del kernel API signature change, the module
  compiles and loads successfully. However, actually streaming through the
  resulting /dev/videoX device causes a complete system hard-freeze.
  
  Reproduced 3/3 times (2x via ffplay, 1x via v4l2-ctl --stream-mmap).
  Symptoms: display becomes fully unresponsive, keyboard LEDs still toggle
  but no input is processed, SysRq/REISUB does not respond, machine stays
  reachable over the network (SSH), requiring a hard power cycle to
  recover. No kernel oops/panic was captured in the journal before the
  freeze -- the log simply stops.
  
  This does NOT reproduce on kernel 6.17.0-40-generic with the identical
  userspace pipeline (same v4l2loopback source, same docker-based ffmpeg
  writer, same ffplay/v4l2-ctl reader).
  
  Filed upstream as a separate issue from the build failure:
  https://github.com/v4l2loopback/v4l2loopback/issues/670
  
  A maintainer commented on that upstream issue suggesting this could be
  related to https://github.com/v4l2loopback/v4l2loopback/issues/532
  (missing list protection against concurrent access in 0.12.7,
  potentially causing a panic), and confirmed the current main branch
  (0.15.4) runs on kernel 7.0+ without this issue. Given Ubuntu's packaged
  version (0.12.7) is 9 releases behind upstream, this may already be
  fixed by updating the packaged version rather than needing a targeted
  backport.
  
  Steps to reproduce:
  1. Apply the compile fix from the comment linked above to 
/usr/src/v4l2loopback-0.12.7/v4l2loopback.c and rebuild via DKMS for kernel 
7.0.0-28-generic
  2. Write to the loopback device via ffmpeg (dockerized):
     docker run --rm --device=/dev/video0:/dev/video0 jrottenberg/ffmpeg -loop 
1 -re -i /data/image.png -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video0
  3. On the host, read from the device:
     v4l2-ctl --device=/dev/video0 --stream-mmap --stream-count=5 
--stream-to=/tmp/test.raw
     or: ffplay /dev/video0
  4. System hard-freezes within seconds.
  
  Expected: streaming works without crashing, as it does on kernel
  6.17.0-40-generic.
  
  Configuration:
  - v4l2loopback version: 0.12.7 (patched per the comment above for kernel 7.0 
API compat)
  - kernel version: 7.0.0-28-generic (x86_64) -- reproduced; NOT reproduced on 
6.17.0-40-generic
  - Distribution: Ubuntu 24.04 LTS (Noble Numbat), HWE kernel from 
linux-signed-hwe-7.0
  - GPU: NVIDIA (proprietary driver 595.71.05, DKMS) + AMD iGPU (amdgpu), 
hybrid graphics, Wayland session
  
  ---
  Filed with the help of Claude (Anthropic).

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2161239

Title:
  v4l2loopback 0.12.7 causes full system hard-freeze when streaming on
  kernel 7.0 HWE

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


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to