MEDIUM 4.7

CVE-2026-53352: Linux Kernel Signal Handling Race Condition – Patch Guidance

CVE-2026-53352 is a race condition in the Linux kernel's signal handling code. When a multi-threaded process receives a stop signal and one thread calls execve() simultaneously, the kernel fails to properly clean up job control flags on the calling thread. This leaves stale signal state that causes the thread to attempt an invalid operation when returning to user mode, triggering a kernel warning. The vulnerability requires local access and specific timing, but can crash or destabilize the kernel.

Source data · NVD / CISA · public domain

CVSS
3.1 · 4.7 MEDIUM · CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
Weaknesses (CWE)
CWE-362
Affected products
7 configuration(s)
Published / Modified
2026-07-01 / 2026-07-22

NVD description (verbatim)

In the Linux kernel, the following vulnerability has been resolved: signal: clear JOBCTL_PENDING_MASK for caller in zap_other_threads() When a multi-threaded process receives a stop signal (e.g., SIGSTOP), do_signal_stop() sets JOBCTL_STOP_PENDING and JOBCTL_STOP_CONSUME on all threads and sets signal->group_stop_count to the number of threads. If one of the threads concurrently calls execve(), de_thread() invokes zap_other_threads() to kill all other threads. zap_other_threads() aborts the pending group stop by resetting signal->group_stop_count to 0 and clears the JOBCTL_PENDING_MASK for all other threads. However, it fails to clear the job control flags for the calling thread. When execve() completes, the calling thread returns to user mode and checks for pending signals. Seeing the stale JOBCTL_STOP_PENDING flag, it calls do_signal_stop(), which invokes task_participate_group_stop(). Since JOBCTL_STOP_CONSUME is still set, it attempts to decrement the already-zero signal->group_stop_count, triggering a warning: sig->group_stop_count == 0 WARNING: CPU: 1 PID: 6475 at kernel/signal.c:373 task_participate_group_stop+0x215/0x2d0 Call Trace: <TASK> do_signal_stop+0x3be/0x5c0 kernel/signal.c:2619 get_signal+0xa8c/0x1330 kernel/signal.c:2884 arch_do_signal_or_restart+0xbc/0x840 arch/x86/kernel/signal.c:337 exit_to_user_mode_loop+0x8c/0x4d0 kernel/entry/common.c:98 do_syscall_64+0x33e/0xf80 arch/x86/entry/syscall_64.c:100 entry_SYSCALL_64_after_hwframe+0x77/0x7f </TASK> Fix this race condition by clearing the JOBCTL_PENDING_MASK for the calling thread in zap_other_threads(), ensuring it does not retain any stale job control state after the thread group is destroyed. This aligns with other functions that tear down a thread group and abort group stops, such as zap_process() and complete_signal(), which correctly clear these flags for all threads including the current one.

8 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability exists in the zap_other_threads() function, which is called during execve() to terminate sibling threads when a multi-threaded process replaces its image. When a group stop (SIGSTOP, SIGTSTP, etc.) is pending, do_signal_stop() sets JOBCTL_STOP_PENDING and JOBCTL_STOP_CONSUME flags on all threads and initializes signal->group_stop_count. The zap_other_threads() function correctly resets group_stop_count to 0 and clears JOBCTL_PENDING_MASK for other threads, but fails to clear these flags for the calling thread. After execve() completes, the calling thread returns to user mode and checks for pending signals. With the stale JOBCTL_STOP_PENDING flag still set, it invokes do_signal_stop(), which calls task_participate_group_stop(). Since JOBCTL_STOP_CONSUME remains set, the code attempts to decrement an already-zero group_stop_count, causing a kernel warning at kernel/signal.c:373. The fix clears JOBCTL_PENDING_MASK for the calling thread in zap_other_threads(), aligning with similar functions like zap_process() and complete_signal() that properly handle all threads.

Business impact

This vulnerability can cause kernel instability and warnings in production Linux systems. While it does not directly leak data or enable privilege escalation, the resulting kernel warning may trigger crash dumps, automated alerting, or system restarts depending on kernel configuration. Multi-threaded applications that concurrently execute system calls (execve) while handling stop signals—such as shell job control implementations or process managers—are at higher risk. The impact is primarily availability-related, affecting system reliability and potentially disrupting containerized or virtualized workloads.

Affected systems

This vulnerability affects the Linux kernel across multiple versions. All systems running vulnerable kernel versions with multi-threaded process support are potentially affected. The issue requires local execution context (unprivileged user can trigger it) and specific timing between signal delivery and execve() execution. Systems running hardened or heavily patched kernel versions may have mitigations in place. Specific affected kernel versions and patch availability should be verified against the Linux kernel security advisories and your distribution's patch schedule.

Exploitability

Exploitability is moderate. The vulnerability requires local access and unprivileged execution (CVSS notes PR:L—local privilege required but not root). Triggering the race condition requires careful timing between a stop signal and execve() call, making it non-trivial to reproduce reliably. However, the condition can be induced through scripting or process orchestration that rapidly spawns multi-threaded processes under signal load. Once triggered, it manifests as a kernel warning rather than immediate system compromise, reducing the attack surface. This is not currently tracked in the Known Exploited Vulnerabilities (KEV) catalog.

Remediation

Apply the kernel patch that clears JOBCTL_PENDING_MASK for the calling thread in zap_other_threads(). This is a targeted fix in the signal handling subsystem (kernel/signal.c). Patch your Linux kernel to the first stable release containing this fix. Verify the patch version number against your distribution's advisories (Red Hat, Ubuntu, Debian, SUSE, etc.). Until patched, systems can reduce exposure by minimizing concurrent signal delivery and multi-threaded execve() patterns, though this is not a practical workaround for normal application behavior.

Patch guidance

Kernel patches for this vulnerability will be released through the Linux kernel mainline and distributed by your Linux vendor. Check your distribution's security advisory page for patch availability. For example, Red Hat, Ubuntu, and Debian will issue kernel security updates that include this fix. Use your package manager (yum, apt, zypper) to apply kernel updates once available. Verify the patch is included by checking the kernel version and release notes, or by reviewing the commit hash against the upstream kernel repository. After patching, reboot to load the updated kernel.

Detection guidance

Monitor kernel logs for the specific warning message: 'WARNING: CPU: X PID: YYYY at kernel/signal.c:373 task_participate_group_stop+0x215/0x2d0'. This warning is the primary indicator of the race condition being triggered. Enable kernel auditing to log execve() syscalls and signal delivery patterns, particularly in multi-threaded processes. Correlation of SIGSTOP/SIGTSTP delivery with concurrent execve() calls can indicate exposure. Analyze dmesg or systemd journal for the warning signature. Systems experiencing this warning should prioritize kernel patching.

Why prioritize this

Prioritize this patch for systems running multi-threaded applications and process managers, particularly those on systems exposed to untrusted local users. The medium CVSS score (4.7) reflects the local-access requirement and race condition timing, but the availability impact justifies prompt patching. Organizations running containerized workloads or microservice orchestration (which frequently use multi-threaded processes and signal handling) should elevate patch priority. This should be addressed within your standard kernel update cycle, particularly for development and staging environments where the race condition is more likely to be observed.

Risk score, explained

CVSS 3.1 score of 4.7 (MEDIUM) reflects: AV:L (local network access only), AC:H (attack complexity high due to race condition timing), PR:L (local unprivileged user can trigger), UI:N (no user interaction needed), S:U (scope unchanged), C:N (no confidentiality impact), I:N (no integrity impact), A:H (high availability impact via kernel warning/crash). The score appropriately captures the limited attack surface while acknowledging the real availability risk.

Frequently asked questions

Can this vulnerability be exploited remotely?

No. CVE-2026-53352 requires local code execution (CVSS AV:L). An attacker must have shell access or the ability to run processes on the target system. It cannot be triggered over the network.

Will this vulnerability cause a kernel crash or just a warning?

The vulnerability manifests as a kernel warning (WARN_ON) in the signal handling code. Whether this causes a system crash depends on kernel configuration (panic_on_warn setting), logging systems, and monitoring tools. In production systems with strict alerting, it may trigger automated responses. It does not directly cause a crash but can indicate kernel instability.

What applications are most at risk?

Multi-threaded applications that use concurrent execve() calls and signal handling are at higher risk. Shell job control, process managers, container runtimes, and parallel execution frameworks (like GNU parallel or task schedulers) are common examples. Single-threaded applications are unaffected.

Is there a workaround if I cannot patch immediately?

There is no reliable workaround. Reducing signal delivery to multi-threaded processes or avoiding concurrent execve() calls is impractical for normal applications. Patching the kernel is the proper solution. Interim mitigation consists of monitoring for the warning and prioritizing systems for patching.

This analysis is based on publicly available vulnerability data as of the publication date. Patch availability, affected kernel versions, and vendor advisories may vary by distribution. Always verify CVE details, patch status, and compatibility against your specific Linux vendor's security advisory (Red Hat, Ubuntu, Debian, SUSE, etc.) before deploying updates. SEC.co makes no warranty regarding the completeness or timeliness of this information. Organizations should conduct their own risk assessment and testing in non-production environments before applying patches to production systems. Source: NVD (public-domain), retrieved 2026-08-10. Analysis generated by SEC.co (claude-haiku-4-5).