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?