# CVE-2026-68416: mtd: fix double free and WARN_ON in add_mtd_device() error paths

Status: published. Published: 2026-08-10. Updated: 2026-11-06.

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

mtd: fix double free and WARN_ON in add_mtd_device() error paths

When device_register() or mtd_nvmem_add() fails inside
add_mtd_device() for a partition, the error handling triggers
mtd_release() via put_device() or device_unregister(). mtd_release()
calls release_mtd_partition() which frees the mtd_info structure.
However, callers such as mtd_add_partition() and add_mtd_partitions()
also call free_partition() in their error paths, resulting in a double
free.

Additionally, release_mtd_partition() hits WARN_ON(!list_empty(
&mtd->part.node)) because the partition node is still linked in the
parent's partitions list when the release callback fires from the
add_mtd_device() error path.

Fix this by overriding dev->type and dev->release before put_device()
in the error paths, so that device_release() invokes a no-op function
instead of mtd_release(). For the mtd_nvmem_add() failure case,
device_unregister() is replaced with device_del() to separate the
device removal from the final kobject reference drop, allowing the
override to take effect before put_device() is called.

The callers' error paths (list_del + free_partition) remain the sole
owners of mtd_info lifetime on add_mtd_device() failure, which is the
expected contract.

The normal partition teardown path is not affected: del_mtd_device()
goes through kref_put() -> mtd_device_release() -> device_unregister()
with dev->type still set to &mtd_devtype, so mtd_release() ->
release_mtd_partition() continues to work correctly for the regular
removal case.

## Remediation

No remediation reported in collected sources

## Affected products and versions

- Linux / Linux: ≥ 93c08951d7070134b7415ca4abd0d25876aa653b; < b1f78dc4a6869e30ff64345a5d3e7da1b6da0061 (affected, git); ≥ 006764e33fe9cff72f8a68ce1dab570d93662c96; < 1dfe90daee6080b088b65620ff690a56f59ddea2 (affected, git); ≥ 19bfa9ebebb5ec0695def57eb1d80de7e9cab369; < ffe21a3545b439e7b11578a701c22a847c149561 (affected, git); ≥ 19bfa9ebebb5ec0695def57eb1d80de7e9cab369; < e1e96aca1bdf391e2f49531c270ffc134e5b49a5 (affected, git); ≥ 19bfa9ebebb5ec0695def57eb1d80de7e9cab369; < f98ae09c727dcf34f745c875661c64b642e4abfa (affected, git); ≥ 19bfa9ebebb5ec0695def57eb1d80de7e9cab369; < 820f983d641937a787e841ee4b93501f69f5683e (affected, git); ≥ 19bfa9ebebb5ec0695def57eb1d80de7e9cab369; < 9d4af746af8ce27eefc2338b2feaa1e01f28b6c3 (affected, git). Source: CNA: Linux
- Linux / Linux: 6.6 (affected); ≥ 0; < 6.6 (unaffected, semver); ≥ 6.6.148; ≤ 6.6.* (unaffected, semver); ≥ 6.12.101; ≤ 6.12.* (unaffected, semver); ≥ 6.18.42; ≤ 6.18.* (unaffected, semver); ≥ 7.1.6; ≤ 7.1.* (unaffected, semver); ≥ 7.2; ≤ * (unaffected, original_commit_for_fix). Source: CNA: Linux

## Severity and prioritization

- CISA KEV: No listing in collected sources

- EPSS: 0.16% as of 2026-11-06; percentile 5.31%

- SSVC: exploitation none; automatable no; technical impact partial; source ADP: CISA-ADP

- Weaknesses: Not reported

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://git.kernel.org/stable/c/b1f78dc4a6869e30ff64345a5d3e7da1b6da0061 (CNA: Linux)

- https://git.kernel.org/stable/c/1dfe90daee6080b088b65620ff690a56f59ddea2 (CNA: Linux)

- https://git.kernel.org/stable/c/ffe21a3545b439e7b11578a701c22a847c149561 (CNA: Linux)

- https://git.kernel.org/stable/c/e1e96aca1bdf391e2f49531c270ffc134e5b49a5 (CNA: Linux)

- https://git.kernel.org/stable/c/f98ae09c727dcf34f745c875661c64b642e4abfa (CNA: Linux)

- https://git.kernel.org/stable/c/820f983d641937a787e841ee4b93501f69f5683e (CNA: Linux)

- https://git.kernel.org/stable/c/9d4af746af8ce27eefc2338b2feaa1e01f28b6c3 (CNA: Linux)

- https://git.kernel.org/stable/c/1dfe90daee6080b088b65620ff690a56f59ddea2 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/820f983d641937a787e841ee4b93501f69f5683e (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/9d4af746af8ce27eefc2338b2feaa1e01f28b6c3 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/b1f78dc4a6869e30ff64345a5d3e7da1b6da0061 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/e1e96aca1bdf391e2f49531c270ffc134e5b49a5 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/f98ae09c727dcf34f745c875661c64b642e4abfa (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

- https://git.kernel.org/stable/c/ffe21a3545b439e7b11578a701c22a847c149561 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)

## Provenance

- CNA: Linux: https://www.cve.org/CVERecord?id=CVE-2026-68416; retrieved 2026-11-06; source updated 2026-11-06

- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-68416; retrieved 2026-11-06; source updated 2026-11-06

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-68416; retrieved 2026-11-06; source updated Not reported

Revision: e9a67606fedbe3b8dd6e40463213b017318531d5780bd1d92ad1a27595aa4072

Canonical: https://y2.dev/cve/CVE-2026-68416

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.