CVE-2026-31533 net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption

Critical 9.8 Published Updated

A use-after-free in the Linux kernel's TLS encryption path allows attackers to execute arbitrary code or escalate privileges via crafted network traffic.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Over the internet
Victim action needed
Not needed
Fix
Available

What is CVE-2026-31533?

CVE-2026-31533 is a critical use after free vulnerability in Linux kernel, published on 23 Apr 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.

Official description

In the Linux kernel, the following vulnerability has been resolved:

net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption

The -EBUSY handling in tls_do_encryption(), introduced by commit 859054147318 ("net: tls: handle backlogging of crypto requests"), has a use-after-free due to double cleanup of encrypt_pending and the scatterlist entry.

When crypto_aead_encrypt() returns -EBUSY, the request is enqueued to the cryptd backlog and the async callback tls_encrypt_done() will be invoked upon completion. That callback unconditionally restores the scatterlist entry (sge->offset, sge->length) and decrements ctx->encrypt_pending. However, if tls_encrypt_async_wait() returns an error, the synchronous error path in tls_do_encryption() performs the same cleanup again, double-decrementing encrypt_pending and double-restoring the scatterlist.

The double-decrement corrupts the encrypt_pending sentinel (initialized to 1), making tls_encrypt_async_wait() permanently skip the wait for pending async callbacks. A subsequent sendmsg can then free the tls_rec via bpf_exec_tx_verdict() while a cryptd callback is still pending, resulting in a use-after-free when the callback fires on the freed record.

Fix this by skipping the synchronous cleanup when the -EBUSY async wait returns an error, since the callback has already handled encrypt_pending and sge restoration.

Weakness: CWE-416

Which versions are affected by CVE-2026-31533?

It affects 1 product.

Products include Linux kernel.

How do I fix CVE-2026-31533?

Apply the vendor's patch.

Upgrade to the fixed version. These bugs are found with fuzzing and sanitisers and avoided by memory-safe languages. More about Use after free.

Is CVE-2026-31533 being exploited?

There is no known exploitation of CVE-2026-31533 in the wild and no public exploit code.

All Linux kernel vulnerabilities

Sources

Also known as AZL-85067, BELL-CVE-2026-31533, DEBIAN-CVE-2026-31533, GHSA-r7wv-m72q-8qj8, ROOT-OS-DEBIAN-12-CVE-2026-31533, ROOT-OS-DEBIAN-13-CVE-2026-31533 and 2 more.

Is CVE-2026-31533 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free