The Linux Virtual Memory System: Other Security Problems

Learn how Linux improves its defense system by kernel page-table isolation to protect itself from recent emerging attacks.

As we write these words (August, 2018), the world of systems security has been turned upside down by two new and related attacks. The first is called Meltdown, and the second Spectre. They were discovered at about the same time by four different groups of researchers/engineers, and have led to deep questioning of the fundamental protections offered by computer hardware and the OS above. See and for papers describing each attack in detail. Spectre is considered the more problematic of the two.

Speculative execution

The general weakness exploited in each of these attacks is that the CPUs found in modern systems perform all sorts of crazy behind-the-scenes tricks to improve performance. One class of technique that lies at the core of the problem is called speculative execution, in which the CPU guesses which instructions will soon be executed in the future, and starts executing them ahead of time. If the guesses are correct, the program runs faster; if not, the CPU undoes their effects on architectural state (e.g., registers) tries again, this time going down the right path.

The problem with speculation is that it tends to leave traces of its execution in various parts of the system, such as processor caches, branch predictors, etc. And thus the problem: as the authors of the attacks show, such state can make vulnerable the contents of memory, even memory that we thought was protected by the MMU.

Kernel page-table isolation

One avenue to increasing kernel protection was thus to remove as much of the kernel address space from each user process and instead have a separate kernel page table for most kernel data (called kernel page-table isolation, or KPTI“KASLR is Dead: Long Live KASLR” by D. Gruss, M. Lipp, M. Schwarz, R. Fell- ner, C. Maurice, S. Mangard. Engineering Secure Software and Systems, 2017. Available: Excellent info on KASLR, KPTI, and beyond.). Thus, instead of mapping the kernel’s code and data structures into each process, only the barest minimum is kept therein; when switching into the kernel, then, a switch to the kernel page table is now needed. Doing so improves security and avoids some attack vectors, but at a cost: performance. Switching page tables is costly. Ah, the costs of security: convenience and performance.

Unfortunately, KPTI doesn’t solve all of the security problems laid out above, just some of them. And simple solutions, such as turning off speculation, would make little sense, because systems would run thousands of times slower. Thus, it is an interesting time to be alive, if systems security is your thing.

Get hands-on with 1200+ tech skills courses.