Public bug reported:

[Impact]
The VFS layer now enforces that inodes flagged with S_ANON_INODE must be 
located on
filesystems with the SB_I_NOEXEC flag set. The dmabuf (Direct Memory Access 
Buffer)
filesystem creates inodes using alloc_anon_inode(), which sets the S_ANON_INODE 
flag
but does not set SB_I_NOEXEC and SB_I_NODEV on the filesystem.

This causes a kernel warning when a dmabuf is memory-mapped, which can occur in
multimedia applications such as GStreamer's v4l2src (Video4Linux source) 
element.
The warning does not cause a crash but indicates a VFS policy violation that 
will
eventually become a fatal error in future kernel versions.

Error log:
```
[   60.061328] WARNING: CPU: 2 PID: 2803 at fs/exec.c:125 path_noexec+0xa0/0xd0
...
[   60.061637]  do_mmap+0x2b5/0x680
```

Affected scenarios: Any system running multimedia applications that use video 
capture
or memory-mapped dmabuf operations, particularly with Video4Linux source 
elements or
similar hardware-accelerated media processing.

[Fix]
Set the SB_I_NOEXEC and SB_I_NODEV flags on the dmabuf filesystem context. This 
follows
the same pattern previously applied to other anonymous inode filesystems such as
secretmem (commit 98f99394a104c) and the anon_inode filesystem (commit 
ce7419b6cf23d).

The fix is minimal - adding two flag assignments in drivers/dma-buf/dma-buf.c:
- fc->s_iflags |= SB_I_NOEXEC;
- fc->s_iflags |= SB_I_NODEV;

These changes align the dmabuf filesystem with the VFS enforcement introduced in
commit 1e7ab6f67824 ("anon_inode: rework assertions").

[Test Plan]
1. Install a system with a video capture device (USB webcam, integrated camera, 
or
   Video4Linux-compatible device)

2. Install GStreamer and the v4l2src plugin:
   $ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-base

3. Run a GStreamer pipeline that uses v4l2src to capture video:
   $ gst-launch-1.0 v4l2src ! video/x-raw, width=640, height=480, 
framerate=30/1 ! videoconvert ! autovideosink

4. Check the kernel log for warnings:
   $ dmesg | grep -i "path_noexec\|SB_I_NOEXEC"

Expected result without fix:
- WARNING message appears in dmesg at fs/exec.c:125 (path_noexec+0xa0/0xd0)
  indicating anonymous inode on non-compliant filesystem

Expected result with fix:
- No warning appears; video capture works correctly without VFS policy 
violations

[Where problems could occur]
The dmabuf filesystem itself could be affected if the SB_I_NOEXEC or SB_I_NODEV 
flags
cause unexpected behavior with the filesystem's inode operations.

If there are edge cases where the dmabuf filesystem needs to allow execution or 
device
access for specific operations, this fix could prevent those operations from 
working.
Symptoms would include dmabuf allocations failing, memory mapping failing, or 
hardware
acceleration features becoming unavailable.

The SB_I_NODEV flag prevents device node creation on the filesystem (which 
should never
occur on a pseudo-filesystem), and SB_I_NOEXEC prevents execution (which is the 
correct
behavior for a memory buffer filesystem). These are defensive flags used by all
similar anonymous inode filesystems, so the regression risk is minimal, but if 
there
are hidden dependencies on the absence of these flags, dmabuf clients could 
fail.

Monitor for:
- Memory mapping failures in applications using dmabuf
- Failures to create dmabuf file descriptors
- DMA operations failing to map memory regions
- Video capture or media acceleration features becoming unavailable

[Other Info]
This is a backport of a fix for the upstream kernel. The patch follows the exact
approach used in previous commits to other anonymous inode filesystems:
- commit 98f99394a104c ("secretmem: use SB_I_NOEXEC")
- commit ce7419b6cf23d ("anon_inode: raise SB_I_NODEV and SB_I_NOEXEC")

The warning was introduced by commit 1e7ab6f67824 ("anon_inode: rework 
assertions")
which added enforcement in the VFS layer that anonymous inodes must have these 
flags
set on their host filesystem.

Upstream patch reference:
https://lore.kernel.org/lkml/[email protected]/

** Affects: hwe-next
     Importance: Undecided
         Status: New

** Affects: linux-oem-6.17 (Ubuntu)
     Importance: Undecided
         Status: Invalid

** Affects: linux-oem-6.17 (Ubuntu Noble)
     Importance: Undecided
     Assignee: AceLan Kao (acelankao)
         Status: In Progress


** Tags: jira-somerville-3734 jira-somerville-3968 oem-priority somerville

** Also affects: linux-oem-6.17 (Ubuntu Noble)
   Importance: Undecided
       Status: New

** Changed in: linux-oem-6.17 (Ubuntu Noble)
       Status: New => In Progress

** Changed in: linux-oem-6.17 (Ubuntu Noble)
     Assignee: (unassigned) => AceLan Kao (acelankao)

** Changed in: linux-oem-6.17 (Ubuntu)
       Status: New => Invalid

** Tags added: jira-somerville-3968 oem-priority somerville

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

Title:
  dma-buf filesystem flags fix

To manage notifications about this bug go to:
https://bugs.launchpad.net/hwe-next/+bug/2139656/+subscriptions


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

Reply via email to