Re: [RFC] TID v2.0: kernel module for cache-line zeroization against Flush+Reload (CLFLUSHOPT + LFENCE + REP STOSQ)
Jann Horn <[email protected]> Tue, 19 May 2026 23:41:56 +0200
| Newsgroups | com.openwall.lists.kernel-hardening,org.kernel.vger.linux-api,org.kernel.vger.linux-crypto,org.kernel.vger.linux-hardening,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-security-module,org.kvack.linux-mm |
|---|---|
| Message-ID | <CAG48ez3u1OCx+zCWEs-_gowDmQ=KLbXO2xZ83LCZ1o1gxRT3Ww@mail.gmail.com> |
On Tue, May 19, 2026 at 11:31=E2=80=AFPM Ahmad Hasan <[email protected]> wrote: > Thank you for your questions. I'll address each one: > > =3D=3D 1. Threat Model =3D=3D > > The target scenario is a same-machine attacker > in multi-tenant/cloud environments where two > processes share physical L3 cache. > > Example: a cryptographic service and a malicious > process running on the same host. The attacker > uses Flush+Reload to measure cache access timing > after every encryption operation =E2=80=94 no physical > access required. > > This is documented with real measurements: > - Without TID: 78 cycles (Cache HIT =E2=80=94 key pattern visible) > - With TID v2.0: 286 cycles (Cache MISS =E2=80=94 attack defeated) So you're assuming that the cryptographic code leaks secrets through a cache-based side channel? That would be a vulnerability in the crypto code. > =3D=3D 2. Why Kernel Module and not userspace? =3D=3D > > You are correct that CLFLUSHOPT does not require > Ring 0. However, userspace execution can be > interrupted by a Context Switch, which expands > the timing window from 372ns to 36,640ns =E2=80=94 > making the attack significantly easier. Why does it matter how many hundreds of nanoseconds it takes to wipe the data from memory? You can also have a context switch directly before you enter your cache-wiping syscall, or in the middle of a crypto operation. > =3D=3D 3. Why not add this directly to libraries? =3D=3D > > No major security library implements CLFLUSHOPT > after wiping =E2=80=94 not OpenSSL, not libsodium, not > glibc, not memzero_explicit. This gap has existed > since Flush+Reload was published in 2014. I don't think that's a gap, because the standard approach to mitigating cache-based side channels such as FLUSH+RELOAD is to not access memory at secret-dependent indices in the first place.