at 12:02 PM, Nadav Amit <namit@xxxxxxxxxx> wrote: > at 11:56 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > >> On Sun, Sep 02, 2018 at 10:32:18AM -0700, Nadav Amit wrote: >>> This patch-set addresses some issues that were raised in a recent >>> correspondence and might affect the security and the correctness of code >>> patching. (Note that patching performance is not addressed by this >>> patch-set). >>> >>> The main issue that the patches deal with is the fact that the fixmap >>> PTEs that are used for patching are available for access from other >>> cores and might be exploited. They are not even flushed from the TLB in >>> remote cores, so the risk is even higher. Address this issue by >>> introducing a temporary mm that is only used during patching. >>> Unfortunately, due to init ordering, fixmap is still used during >>> boot-time patching. Future patches can eliminate the need for it. >> >> Remind me; why are we doing it like this instead of fixing fixmap? >> Because while this fixes the text_poke crud, it does leave fixmap >> broken. > > Do you have other fixmap mappings in mind that are modified after boot? Oh.. I misunderstood you. You mean: why not to make the fixmap mappings that are used for text_poke() as private ones. Well, the main reason is that it can require synchronizations of the different page-tables whenever a module is loaded/unloaded. The fixmap region shares a PGD and PUD with the modules area in x86-64. In contrast, the proposed solution uses a different PGD, so no synchronization between page-tables is needed when modules are loaded. Remember that module memory is allocated even when BPF programs are installed, which can be rather common scenario.