Come può un processo linux userspace fare riferimento a un indirizzo del kernel?

1

Mi piacerebbe aiutare a capire un aspetto particolare del tracollo.

La mia comprensione è che il bug di fusione può essere usato per un processo di Linux nello userspace per accedere alla memoria del kernel (indirettamente, attraverso un canale temporale). Il listato 2 nel documento di fusione è:

1 ; rcx = kernel address
2 ; rbx = probe array
3 retry:
4 mov al, byte [rcx]
5 shl rax, 0xc
6 jz retry
7 mov rbx, qword [rbx + rax]

Ciò di cui sono confuso è come possa esistere un "indirizzo del kernel" all'interno di un processo userspace. Un processo userspace non avrebbe il proprio spazio di indirizzamento e mappatura della memoria, diverso dal kernel? La mia aspettativa è che in un processo userspace l'indirizzo all'interno di rcx sia tradotto in qualcosa di diverso da quello che verrebbe tradotto nel kernel. Probabilmente solo un errore / errore di segmentazione.

Come è possibile che un processo userspace in linux faccia riferimento a un indirizzo del kernel?

    
posta rain1 08.01.2018 - 17:57
fonte

1 risposta

5

Come ottimizzazione delle prestazioni, la memoria del kernel è stata mappata all'interno dello spazio di memoria dell'applicazione. Le pagine sono protette, ma le tabelle delle pagine erano (prima di KPTI) mappate in modo che non dovessero caricarle dalla memoria su ogni chiamata di sistema. Ora ogni chiamata di sistema comporta un sovraccarico aggiuntivo per caricare le tabelle della pagina del kernel.

    
risposta data 08.01.2018 - 18:06
fonte

Leggi altre domande sui tag