{
  "affected": [
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:12",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:13",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    },
    {
      "ecosystem_specific": {
        "urgency": "not yet assigned"
      },
      "package": {
        "ecosystem": "Debian:14",
        "name": "linux"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "details": "In the Linux kernel, the following vulnerability has been resolved:  tracing: Free histogram the field rejected for a bad modifier  Writing a hist trigger whose value or variable carries a modifier that is not allowed there leaks the fields that were built for it.  __create_val_field() takes the field from parse_expr() and stores it in hist_data-\u003efields[] only after the modifier checks have run:  \thist_field = parse_expr(hist_data, file, field_str, flags, var_name, \t\t\t\t\u0026n_subexprs); \t... \tif (hist_field-\u003eflags \u0026 HIST_FIELD_FL_VAR) { \t\tif (hist_field-\u003eflags \u0026 (...)) \t\t\tgoto err; \t} else { \t\tif (hist_field-\u003eflags \u0026 (...)) \t\t\tgoto err; \t}  \thist_data-\u003efields[val_idx] = hist_field;  Both checks jump past that store, and the err label returns without freeing anything. The error unwinds to create_hist_data(), which calls destroy_hist_data() -\u003e destroy_hist_fields(), and that reaches a field only by walking fields[]. A field that never got there is unreachable.  commit e0213434fe3e (\"tracing: Do not let histogram values have some modifiers\") set ret to -EINVAL and fell through to the store, which left the field owned by fields[] and freed along with the rest of hist_data. Splitting the check into a value case and a variable case replaced that fall-through with a goto that skips it.  With CONFIG_DEBUG_KMEMLEAK, 200 writes of    # echo 'hist:keys=prev_pid:vals=next_pid.log2' \u003e \\ \t events/sched/sched_switch/trigger  each correctly rejected with -EINVAL, leave 332 unreferenced objects (63744 bytes) reported at create_hist_field(); 200 install and remove cycles of a valid trigger leave none. A '.log2' field is two allocations, since create_hist_field() puts the plain field in operands[0] of the log2 field, and both are reported.  Use destroy_hist_field() rather than __destroy_hist_field() so that operands[0] is freed as well. It returns early for HIST_FIELD_FL_VAR_REF, which is what an operand owned by hist_data-\u003evar_refs[] needs; the rejected field itself is never a var ref, because a var ref never carries a modifier flag.",
  "id": "DEBIAN-CVE-2026-97921",
  "modified": "2026-09-26T04:47:32.276527359Z",
  "published": "2026-09-25T11:17:19.160Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://security-tracker.debian.org/tracker/CVE-2026-97921"
    }
  ],
  "upstream": [
    "CVE-2026-97921"
  ]
}