CVE-2026-97921 in Linuxinformazioni

Riassunto

di VulDB • 25/09/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

tracing: liberare il campo dell'istogramma rifiutato per un modificatore non valido

La scrittura di un trigger hist (histogram) il cui valore o variabile contiene un modificatore non consentito in quel contesto provoca una perdita dei campi creati per esso.

__create_val_field() ottiene il campo da parse_expr() e lo memorizza in hist_data->fields[] solo dopo che sono stati eseguiti i controlli sui modificatori:

hist_field = parse_expr(hist_data, file, field_str, flags, var_name, &n_subexprs); ... if (hist_field->flags & HIST_FIELD_FL_VAR) {
if (hist_field->flags & (...)) goto err; } else {
if (hist_field->flags & (...)) goto err; }

hist_data->fields[val_idx] = hist_field;

Entrambi i controlli saltano oltre tale assegnazione, e l'etichetta err ritorna senza liberare nulla. L'errore si propaga a create_hist_data(), che chiama destroy_hist_data() -> destroy_hist_fields(), ma quest'ultima raggiunge un campo solo attraversando fields[]. Un campo che non è mai stato inserito in quella struttura risulta irraggiungibile.

Il commit e0213434fe3e ("tracing: Do not let histogram values have some modifiers") impostava ret a -EINVAL e proseguiva fino all'assegnazione, lasciando il campo di proprietà di fields[] e liberato insieme al resto di hist_data. La suddivisione del controllo in un caso per i valori e uno per le variabili ha sostituito quella prosecuzione con un goto che la salta.

Con CONFIG_DEBUG_KMEMLEAK, 200 scritture di:

# echo 'hist:keys=prev_pid:vals=next_pid.log2' > \ events/sched/sched_switch/trigger

ognuna correttamente rifiutata con -EINVAL, lasciano 332 oggetti non referenziati (63744 byte) segnalati in create_hist_field(); 200 cicli di installazione e rimozione di un trigger valido non ne lasciano alcuno. Un campo '.log2' corrisponde a due allocazioni, poiché create_hist_field() inserisce il campo base nell'operando[0] del campo log2, e entrambi vengono segnalati.

Utilizzare destroy_hist_field() anziché __destroy_hist_field() consente di liberare anche l'operando[0]. La funzione ritorna anticipatamente per HIST_FIELD_FL_VAR_REF, che è ciò di cui ha bisogno un operando posseduto da hist_data->var_refs[]; il campo rifiutato stesso non è mai una var ref, poiché una var ref non porta mai un flag del modificatore.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

25/09/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Do you want to use VulDB in your project?

Use the official API to access entries easily!