Target Subsystems
Attack Surface
CopyFail hit algif_aead (AF_ALG).
Dirty Frag hit esp4/esp6 (IPsec) and rxrpc.
The following subsystems have not been publicly checked for the same anti-pattern.
| Subsystem | Kernel Path | Why It Is Interesting | Priority |
|---|---|---|---|
|
|
Architecturally identical to |
High |
|
|
AF_ALG hashing — reads page data, but may write temporary state through the page reference. |
Medium |
kTLS |
|
In-kernel TLS performs crypto transforms on the send path. Does the TLS record layer copy before encrypting? |
High |
WireGuard |
|
Encrypts packets — does it check page ownership before in-place encryption? |
Medium |
SCTP |
|
Complex protocol with splice support and chunk processing. Less audited than TCP/UDP. |
Medium |
TIPC |
|
Cluster communication protocol. Minimal security audit attention. |
Low |
SMB/CIFS client |
|
Splice support combined with crypto operations (packet signing, encryption). |
Medium |
Compression (zswap, zram) |
|
Page transforms on potentially shared pages during compression. |
Low |
Recommended Starting Point
algif_skcipher.c is the lowest-hanging fruit.
Read it side-by-side with the patched algif_aead.c:
# Get both files from kernel source
# Compare the splice/sendmsg paths
diff <(grep -n 'splice\|sendmsg\|sg_set\|page' crypto/algif_skcipher.c) \
<(grep -n 'splice\|sendmsg\|sg_set\|page' crypto/algif_aead.c)
If algif_skcipher.c has the same in-place optimization that was reverted in algif_aead.c, and if that path is reachable via splice(), that is a new vulnerability.
Kernel Source Setup
Get the source matching your running kernel exactly:
# Running kernel
uname -r
# Arch: use asp
asp update linux && asp checkout linux
# Or download the tarball
curl -LO https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-$(uname -r | sed 's/-.*//' ).tar.xz
System Exposure Check
Run these commands to understand your own system’s attack surface:
# Kernel version -- are you in the affected range?
uname -r
# Is algif_aead built-in? (CopyFail modprobe workaround won't help if y)
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
# Are esp4/esp6/rxrpc loaded? (Dirty Frag attack surface)
lsmod | awk '/^esp[46]|^rxrpc/ {print $1, $3 " users"}'
# What AF_ALG modules are available?
find /lib/modules/$(uname -r) -name 'algif_*' -exec basename {} .ko.zst \;
# Check distro patch status
# Arch:
pacman -Si linux | awk '/^Version/'
# RHEL/Alma:
dnf check-update kernel
# Ubuntu/Debian:
apt list --upgradable 2>/dev/null | grep linux-image