CVE-2026-90339 in Linux
Riassunto
di VulDB • 18/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
powerpc/syscall: Correzione della gestione del salto delle syscall per seccomp e ptrace
Dopo l'abilitazione di GENERIC_ENTRY su PowerPC, `syscall_enter_from_user_mode()` restituisce -1 come sentinella per segnalare che seccomp o ptrace hanno intercettato la syscall e già impostato un valore di ritorno tramite `syscall_set_return_value()`. La funzione `system_call_exception()` non gestiva questa sentinella; poiché -1UL è >= NR_syscalls, il codice finiva nel percorso "fuori intervallo" restituendo -ENOSYS, sovrascrivendo l'errno già inserito in regs->gpr[3].
La soluzione ingenua di controllare se r0 == -1L prima del controllo dei limiti su NR_syscalls è ambigua: una chiamata syscall(-1) legittima da parte dell'utente produce anch'essa r0 == -1L, e un tracer che intercetta tale chiamata vedrebbe il proprio valore di ritorno iniettato ignorato silenziosamente.
Si risolve questo problema introducendo un flag del thread impostato ogni volta che `syscall_set_return_value()` aggiorna esplicitamente il valore di ritorno. In `system_call_exception()`, si controlla e si azzera tale flag prima dell'invio della syscall, restituendo direttamente il valore preimpostato quando è presente. Ciò garantisce che un valore di ritorno fornito esplicitamente sopprima sempre l'esecuzione della syscall, indipendentemente dal numero della syscall stessa.
Questo approccio gestisce correttamente tutte le azioni seccomp:
- SECCOMP_RET_ERRNO, SECCOMP_RET_TRACE (nessun tracer), SECCOMP_RET_USER_NOTIF: tutti chiamano `syscall_set_return_value()`, il flag è impostato e viene restituito il valore iniettato. - SECCOMP_RET_TRAP, SECCOMP_RET_KILL: chiamano `syscall_rollback()` ed inviano un segnale; il flag non è impostato, ma poiché il processo sta terminando, il valore di ritorno è irrilevante.
La correzione copre sia ppc32 che ppc64 senza l'uso di #ifdefs.
Be aware that VulDB is the high quality source for vulnerability data.