# CVE-2026-46063: x86/shstk: Prevent deadlock during shstk sigreturn

CVE-2026-46063 is fixed in 16 products on 1 platform, first by DEBIAN-CVE-2026-46063, released May 27, 2026. It is not reported as exploited. Patch Radar priority: Routine.

- Web page: https://patchblox.com/security/cve/CVE-2026-46063
- Priority: Routine
- CVSS: 5.5 (Moderate)
- EPSS: 0.0009
- CISA KEV: not listed
- Exploited (vendor report): no
- Publicly disclosed: no
- Published: May 27, 2026
- Vendor advisory: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-46063

## Description

In the Linux kernel, the following vulnerability has been resolved:  x86/shstk: Prevent deadlock during shstk sigreturn  During sigreturn the shadow stack signal frame is popped. The kernel does this by reading the shadow stack using normal read accesses. When it can't assume the memory is shadow stack, it takes extra steps to makes sure it is reading actual shadow stack memory and not other normal readable memory. It does this by holding the mmap read lock while doing the access and checking the flags of the VMA.  Unfortunately that is not safe. If the read of the shadow stack sigframe hits a page fault, the fault handler will try to recursively grab another mmap read lock. This normally works ok, but if a writer on another CPU is also waiting, the second read lock could fail and cause a deadlock.  Fix this by not holding mmap lock during the read access to userspace.  Instead use mmap_lock_speculate_...() to watch for changes between dropping mmap lock and the userspace access. Retry if anything grabbed an mmap write lock in between and could have changed the VMA.  These mmap_lock_speculate_...() helpers use mm::mm_lock_seq, which is only available when PER_VMA_LOCK is configured. So make X86_USER_SHADOW_STACK depend on it. On x86, PER_VMA_LOCK is a default configuration for SMP kernels. So drop support for the other configs under the assumption that the !SMP shadow stack user base does not exist.  Currently there is a check that skips the lookup work when the SSP can be assumed to be on a shadow stack. While reorganizing the function, remove the optimization to make the tricky code flows more common, such that issues like this cannot escape detection for so long.

## Where it's fixed

| Platform | Product | Fixed in | Fix | Released |
|---|---|---|---|---|
| Linux | dtb-aarch64 opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-64kb opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-64kb sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-64kb sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-azure opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-azure sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-azure sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-default opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-default sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-default sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-default-base opensuse-leap 16.0 | 6.12.0-160000.36.1.160000.2.17 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-default-base sles 15.7 | 6.4.0-150700.53.66.1.150700.17.39.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-default-base sles 16.0 | 6.12.0-160000.36.1.160000.2.17 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-docs opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-docs sles 15.7 | 6.4.0-150700.53.66.2 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-docs sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-kvmsmall opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-kvmsmall sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-livepatch-SLE15-SP7-RT_Update_17 sles 15.7 | 1-150700.1.3.1 | [SUSE-SU-2026:2799-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2799-1.md) | Jul 8, 2026 |
| Linux | kernel-livepatch-SLE15-SP7_Update_18 sles 15.7 | 1-150700.15.3.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-obs-build opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-obs-build sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-obs-qa opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-obs-qa sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-rt opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-source opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-source sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-source sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-syms opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-syms sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-syms sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | kernel-zfcpdump opensuse-leap 16.0 | 6.12.0-160000.36.1 | [OPENSUSE-SU-2026:21388-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21388-1.md) | Jul 21, 2026 |
| Linux | kernel-zfcpdump sles 15.7 | 6.4.0-150700.53.66.1 | [SUSE-SU-2026:2800-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-2800-1.md) | Jul 8, 2026 |
| Linux | kernel-zfcpdump sles 16.0 | 6.12.0-160000.36.1 | [SUSE-SU-2026:22835-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-22835-1.md) | Jul 21, 2026 |
| Linux | linux Debian 13.5 (trixie) | 6.12.88-1 | [DEBIAN-CVE-2026-46063](https://patchblox.com/security/data/fix/linux/debian-cve-2026-46063.md) | May 27, 2026 |
| Linux | linux Debian 14 | 7.0.4-1 | [DEBIAN-CVE-2026-46063](https://patchblox.com/security/data/fix/linux/debian-cve-2026-46063.md) | May 27, 2026 |

---

Data as of 2026-11-08T06:59:42Z UTC. Source: Patchblox Patch Radar (https://patchblox.com/security/patch-radar). Patchblox finds out-of-date software on Windows, macOS and Linux and updates it through release rings: https://patchblox.com/demo

Free to use with attribution: show "Data: Patchblox Patch Radar" with a link to https://patchblox.com/security/patch-radar. Terms, including what needs a written agreement: https://patchblox.com/security/patch-radar/use-the-data

Product names, logos and trademarks shown on Patch Radar belong to their respective owners. They are used only to identify the software each security fix applies to and to help readers find their platform. Their use does not imply any affiliation with, or endorsement by, those owners, and Patchblox is not affiliated with any of them.
