CVE-2022-49214 in Linuxinformazioni

Riassunto

di VulDB • 19/06/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

powerpc/64s: Non utilizzare DSISR per gli errori di tipo SLB

A partire dal commit 46ddcb3950a2 ("powerpc/mm: Show if a bad page fault on data is read or write."), viene utilizzata `page_fault_is_write(regs->dsisr)` in `__bad_page_fault()` per determinare se l'errore riguarda una lettura o una scrittura, modificando di conseguenza il messaggio stampato.

Tuttavia, gli errori SLB (noti anche come Data Segment Interrupt) non impostano DSISR (Data Storage Interrupt Status Register) su un valore utile. Tutte le versioni ISA dalla v2.03 alla v3.1 specificano che l'interruzione del segmento dati imposta DSISR "su un valore indefinito". Per quanto mi sia possibile verificare, non vi è alcuna menzione negli appunti BookIV relativa all'impostazione di DSISR da parte degli errori SLB.

Ciò si manifesta con accessi che dovrebbero essere letture riportati erroneamente come scritture; ad esempio, utilizzando il comando "dump" di xmon:

0:mon> d 0x5deadbeef0000000 5deadbeef0000000 [359526.415354][ C6] BUG: Unable to handle kernel data access on write at 0x5deadbeef0000000
[359526.415611][ C6] Faulting instruction address: 0xc00000000010a300
cpu 0x6: Vector: 380 (Data SLB Access) at [c00000000ffbf400]
pc: c00000000010a300: mread+0x90/0x190

Se si disassembla il PC, si osserva un'istruzione di caricamento (load):

0:mon> di c00000000010a300 c00000000010a300 89490000 lbz r10,0(r9)

È inoltre possibile osservare in exceptions-64s.S che il blocco `data_access_slb` non imposta IDSISR=1, il che significa che non carica DSISR in pt_regs. Di conseguenza, il valore utilizzato per determinare se l'errore è una lettura o una scrittura corrisponde a un valore obsoleto presente in pt_regs derivante da un precedente errore di pagina.

Si è provveduto a riscrivere la logica di stampa separando il caso degli errori SLB e stampando solo "read/write" nei casi in cui sia possibile determinarlo con certezza.

Il risultato appare, ad esempio, come segue:

0:mon> d 0x5deadbeef0000000 5deadbeef0000000 [ 721.779525][ C6] BUG: Unable to handle kernel data access at 0x5deadbeef0000000
[ 721.779697][ C6] Faulting instruction address: 0xc00000000014cbe0
cpu 0x6: Vector: 380 (Data SLB Access) at [c00000000ff

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsabile

Linux

Prenotare

26/02/2025

Divulgazione

26/02/2025

Moderazione

accettato

CPE

pronto

EPSS

0.00252

KEV

no

Attività

molto basso

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!