CVE-2026-68096
NoneCVSS
—
EPSS
0.5%
Published
Aug 10, 2026
CISA due date
—
Cloudanix analysis
A flaw in Linux auditing can cause a server to hang when certain monitored files are moved, potentially disrupting services until the system is fixed or restarted.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is a Linux kernel audit subsystem denial-of-service flaw caused by recursive directory locking during audit watch duplication. When a file rename or move operation triggers an fsnotify move event, an executable-related audit rule can cause audit_dupe_exe() to duplicate the rule and call audit_alloc_mark(), which attempts to resolve the parent path with kern_path_parent() while the VFS rename path already holds the parent directory inode mutex. The same task can then attempt to reacquire the same I_MUTEX_PARENT-style directory lock, producing a recursive locking deadlock. The practical impact is local kernel-level deadlock of the task performing the operation, with potential audit, filesystem, or workload disruption depending on where the affected lock is held and how the system responds.
Why it matters to the business
Systems that rely on Linux audit rules for executable or path monitoring may experience hangs or service disruption when watched files are moved or renamed. The most likely consequence is local denial of service rather than data theft or privilege escalation. Because exploitation generally requires either administrative ability to configure audit rules or the presence of vulnerable audit rules already configured, the business risk is highest on servers with complex audit policies, compliance monitoring, endpoint detection tooling, or automated file movement workflows. No known exploitation or CISA KEV listing is currently indicated, and no public exploit maturity was provided, but kernel availability issues can still affect production reliability.
How an attack unfolds
An attacker or administrator-level user first ensures the Linux audit subsystem has an executable/path audit rule referencing a specific file. The actor then performs a rename or move operation on that file. During the VFS rename path, the kernel locks the relevant parent directory or directories and emits an fsnotify move event. The audit subsystem processes the event, determines that an existing executable audit rule matches the moved file, and attempts to duplicate/update the audit watch. In the vulnerable path, audit_alloc_mark() resolves the parent directory again instead of reusing the already-resolved fsnotify context, causing the task to attempt to acquire a directory inode mutex it already holds. This results in a recursive locking deadlock, potentially hanging the operation and affecting kernel audit/filesystem processing on the host.
How to fix it
Apply a vendor kernel update that includes the audit subsystem fix for recursive locking in audit_dupe_exe()/audit_alloc_mark(). The corrected implementation passes fsnotify event context through audit watch handling so the already-resolved directory inode can be reused instead of calling kern_path_parent() while rename locks are held. No exact affected package list or fixed kernel versions were provided in the input, so administrators should consult their Linux distribution, appliance, or cloud image vendor advisories for the first fixed kernel build. Until patched, reduce exposure by reviewing audit rules that combine executable and path filters for movable files, avoiding audit rules that target files frequently moved or renamed, limiting CAP_AUDIT_CONTROL/root access, and scheduling risky audit policy changes during maintenance windows. Mitigations should not replace patching because the defect is in kernel locking behavior.
How to confirm the fix worked
Confirm remediation by verifying the running kernel version is at or above the fixed build supplied by the relevant Linux distribution or kernel vendor, not merely that the package is installed on disk. Review changelogs or advisory text for references to fixing recursive locking deadlock in audit_dupe_exe(), audit_alloc_mark(), or Linux audit watch handling. On non-production test systems only, validation can include reproducing the known trigger pattern: create an audit rule with exe and path filters for a test file, move that file into another directory, and confirm the operation completes without kernel lockdep warnings, hung tasks, or audit subsystem stalls. Also verify that auditd remains running, audit rules remain intact, and system logs do not contain recursive locking or hung task reports after the test.
Typical attack path
- Obtain local access with sufficient privileges to configure audit rules, or identify a system where matching executable/path audit rules already exist.
- Create or identify a file referenced by an audit rule using executable and path filters.
- Move or rename the watched file into another directory using rename, renameat, renameat2, mv, or equivalent filesystem operations.
- Trigger the fsnotify move event while the VFS layer holds parent directory locks.
- Cause the audit subsystem to duplicate/update the executable-related watch and attempt recursive path resolution.
- Induce a kernel deadlock that hangs the triggering task and may degrade host availability.
How to detect it
Look for signs of attempted or accidental triggering in kernel logs, audit logs, and command history. Relevant log sources include dmesg, /var/log/kern.log, /var/log/messages, /var/log/syslog, journald kernel messages, auditd logs, shell history for privileged users, and configuration management records that modify audit rules. Search for kernel lockdep warnings, recursive locking messages, hung task reports, and stack traces containing audit_dupe_exe(), audit_alloc_mark(), audit_update_watch(), audit_watch_handle_event(), fsnotify_move(), vfs_rename(), do_renameat2(), or kern_path_parent(). In audit configuration, look for rules using both -F exe= and -F path= against files that are later moved or renamed. Because this issue is a denial-of-service condition rather than a typical compromise primitive, indicators may reflect instability or misuse rather than confirmed malicious activity. Correlate any matching kernel messages with privileged auditctl/augenrules activity and file move or rename events around the same time.
- WARNING: possible recursive locking detected
- *** DEADLOCK ***
- audit_dupe_exe
- audit_alloc_mark
- audit_update_watch
- audit_watch_handle_event
- kern_path_parent
- __kern_path_locked
- fsnotify_move
- vfs_rename
- do_renameat2
- I_MUTEX_PARENT
- inode->i_sb->s_type->i_mutex_dir_key
- audit_filter_mutex
- fsnotify_mark_srcu
- auditctl -a always,exit -F exe=
- -F path=
- auditctl -D
- renameat2
- __x64_sys_renameat
- hung task
- blocked for more than
What your security team should do
- Prioritize kernel updates on systems with Linux audit enabled, strict compliance audit policies, EDR audit integrations, or workloads that frequently move/rename monitored files.
- Inventory Linux hosts using audit rules with exe= and path= filters, especially rules targeting files under writable or frequently modified directories.
- Restrict the ability to create or modify audit rules to trusted administrators and monitor use of auditctl or augenrules for unexpected changes.
- Before patching, avoid monitoring highly volatile files with combined executable/path audit filters where operationally feasible.
- Monitor kernel logs for recursive locking, audit_dupe_exe(), audit_alloc_mark(), kern_path_parent(), and hung task messages.
- If symptoms appear, preserve kernel logs and audit configuration, then consider rebooting affected hosts only after collecting forensic and operational evidence.
- Track vendor advisories for exact fixed kernel package versions and ensure systems boot into the patched kernel after installation.
The record
In the Linux kernel, the following vulnerability has been resolved: audit: fix recursive locking deadlock in audit_dupe_exe() A deadlock occurs in the audit subsystem when duplicating executable-related rules. When a file is moved (e.g., via do_renameat2()), the VFS layer locks the parent directory (I_MUTEX_PARENT), which synchronously triggers an fsnotify_move event. If an existing executable audit rule matches the file being moved, the audit subsystem catches this event and calls audit_dupe_exe() to duplicate the watch and update the rule. Then, audit_alloc_mark() would call kern_path_parent() to resolve the path, leading to a blind attempt to acquire the exact same I_MUTEX_PARENT lock already held by the task, resulting in the following recursive locking deadlock: ============================================ WARNING: possible recursive locking detected 6.12.0-55.27.1.el10_0.x86_64+debug #1 Not tainted -------------------------------------------- mv/5099 is trying to acquire lock: ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3}, at: __kern_path_locked+0x10a/0x2f0 but task is already holding lock: ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3}, at: lock_two_directories+0x13f/0x2b0 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&inode->i_sb->s_type->i_mutex_dir_key/1); lock(&inode->i_sb->s_type->i_mutex_dir_key/1); *** DEADLOCK *** May be due to missing lock nesting notation 6 locks held by mv/5099: #0: ffff888112a9c440 (sb_writers#13) at: do_renameat2+0x34c/0xbc0 #1: ffff888112a9c790 (&type->s_vfs_rename_key#3) at: do_renameat2+0x415/0xbc0 #2: ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1) at: lock_two_directories+0x13f/0x2b0 #3: ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/5) at: lock_two_directories+0x175/0x2b0 #4: ffffffffb3a1fb10 (&fsnotify_mark_srcu) at: fsnotify+0x454/0x28a0 #5: ffffffffaf886230 (audit_filter_mutex) at: audit_update_watch+0x36/0x11e0 stack backtrace: Call Trace: <TASK> dump_stack_lvl+0x6f/0xb0 print_deadlock_bug.cold+0xbd/0xca validate_chain+0x83a/0xf00 __lock_acquire+0xcac/0x1d20 lock_acquire.part.0+0x11b/0x360 down_write_nested+0x9f/0x230 __kern_path_locked+0x10a/0x2f0 kern_path_locked+0x26/0x40 audit_alloc_mark+0xfb/0x4f0 audit_dupe_exe+0x6c/0xe0 audit_dupe_rule+0x6c2/0xc00 audit_update_watch+0x4cc/0x11e0 audit_watch_handle_event+0x12c/0x1b0 send_to_group+0x5d0/0x8b0 fsnotify+0x615/0x28a0 fsnotify_move+0x1d8/0x630 vfs_rename+0xdcd/0x1df0 do_renameat2+0x9d4/0xbc0 __x64_sys_renameat+0x192/0x260 do_syscall_64+0x92/0x180 entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7f0491fe8c4e Code: 0f 1f 40 00 48 8b 15 c1 e1 16 00 f7 d8 64 89 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa 49 89 ca b8 08 01 00 00 0f 05 <48> 3d 00 f0 ff ff 77 0a c3 66 0f 1f 84 00 00 00 00 00 48 8b 15 89 RSP: 002b:00007ffc7210bf38 EFLAGS: 00000246 ORIG_RAX: 0000000000000108 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f0491fe8c4e RDX: 0000000000000003 RSI: 00007ffc7210e6c8 RDI: 00000000ffffff9c RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001 R10: 00005575eb2dae2a R11: 0000000000000246 R12: 00005575eb2dae2a R13: 00007ffc7210e6c8 R14: 0000000000000003 R15: 00000000ffffff9c </TASK> The aforementioned deadlock can be consistently reproduced by running the script below: audit-dupe-exe-deadlock.sh -------------------------- #!/bin/bash auditctl -D mkdir -p /tmp/foo touch /tmp/file auditctl -a always,exit -F exe=/tmp/file -F path=/tmp/file -S all -k dr mv /tmp/file /tmp/foo/file rm -Rf /tmp/foo This patch fixes the issue by introducing struct audit_watch_ctx to pass the fsnotify event context down to audit_alloc_mark(). By utilizing the already-resolved directory inode provided by the event, we bypass the kern_path_parent() path resol ---truncated---
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|