---
id: "CVE-2026-98740"
kind: "vulnerability"
aliases: ["CVE-2026-98740"]
title: "Linux kernel: Altera EDAC ECC setup code can run from freed init memory"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["altera-soc", "embedded", "linux-kernel", "runtime"]
not_affected_if: ["no-altera-edac-driver"]
published_at: "2026-10-18T16:17:27+00:00"
first_seen_at: "2026-10-23T21:57:16+00:00"
updated_at: "2026-10-25T05:17:05+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-98740", "first_seen_at": "2026-10-23T21:57:16+00:00"}]
---

# Linux kernel: Altera EDAC ECC setup code can run from freed init memory

Some Altera EDAC ECC setup functions were marked __init, so a probe that runs after boot-time init memory is freed (for example a deferred probe or a manual rebind) can call freed code. The fix removes __init from those functions so they stay valid at runtime.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- `uname -r` to find the running kernel version
- Check whether the Altera EDAC driver is loaded with `lsmod | grep altera_edac`
- unknown

## Fix

- Update the Linux kernel to a release that includes the upstream commit removing __init from the EDAC/altera ECC setup paths
- unknown

## Timeline

- 2026-10-23T21:57:16+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-98740

## From the sources

In the Linux kernel, the following vulnerability has been resolved:

EDAC/altera: Drop __init from ECC setup paths for re-probe safety

Sashiko reports:

"Does suppressing sysfs unbinding fully prevent the execution of freed __init
memory? If altr_sysmgr_regmap_lookup_by_phandle() returns -EPROBE_DEFER, the
probe is deferred until after __init memory is freed."

The a10 EDAC .setup callbacks (sdmmc, ethernet, nand, dma, usb, qspi) and
their helpers (altr_init_a10_ecc_device_type, altr_init_a10_ecc_block) were
marked __init. These run from the probe path, which may execute after init
memory is freed -- e.g. a probe deferred via -EPROBE_DEFER that only succeeds
once a late/module dependency appears, or a manual unbind/rebind. Calling
__init code then dereferences freed memory. Remove __init so these functions
remain valid at runtime.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
