# CVE-2026-98496: net: airoha: npu: cancel wdt_work after releasing the WDT IRQ

> A use-after-free in the Airoha NPU driver allows attackers to execute code or cause a denial of service via race conditions during device removal.

- **Severity:** Not scored
- **Exploited in the wild:** Not known
- **Login needed:** Not needed
- **Attackable:** Local or same network only
- **Victim action needed:** Not needed
- **Fix available:** Yes
- **Published:** 18 Oct 2026
- **Updated:** 19 Oct 2026
- **Also known as:** BELL-CVE-2026-98496, DEBIAN-CVE-2026-98496, GHSA-qq9m-vqcj-573m, UBUNTU-CVE-2026-98496

## What is CVE-2026-98496?

CVE-2026-98496 is an use after free vulnerability in Linux, published on 18 Oct 2026. It can only be exploited from the same machine or local network, with no action from the victim.

### Official description

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

net: airoha: npu: cancel wdt_work after releasing the WDT IRQ

airoha_npu_remove() calls cancel_work_sync() on each core's wdt_work,
but the watchdog IRQ that queues it is requested with devm_request_irq()
and is freed only after .remove() returns.  airoha_npu_wdt_handler() can
therefore schedule_work() again once the cancel has returned.  struct
airoha_npu, which contains the work, is devm_kzalloc()'d and is freed in
that same unwind, so the late work dereferences freed memory.

Register the work with devm_work_autocancel() before devm_request_irq()
and drop .remove().  Devres runs in reverse order, so the IRQ is freed
before cancel_work_sync(), including when probe fails.  A cancel left in
.remove() cannot get that order.  Initializing the work first also stops
a pending watchdog interrupt from queuing an uninitialized work item.
Probe currently calls INIT_WORK() only after devm_request_irq().

This issue was identified during our ongoing static-analysis research
while reviewing kernel code.

## Which versions are affected by CVE-2026-98496?


## How do I fix CVE-2026-98496?

Apply the vendor's patch.

## Is CVE-2026-98496 being exploited?

There is no known exploitation of CVE-2026-98496 in the wild and no public exploit code.

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2026-98496 and fix it if it is affected.

What it is: CVE-2026-98496 is an use after free vulnerability in Linux, published on 18 Oct 2026. It can only be exploited from the same machine or local network, with no action from the victim.
Exploitation: There is no known exploitation of CVE-2026-98496 in the wild and no public exploit code.

Affected product: Linux. No package-level version data is available, so check the vendor advisory linked from the reference page.

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2026-98496/ (Markdown: https://insights.sbomify.com/CVE-2026-98496/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2026-98496
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-98496
- OSV: https://osv.dev/vulnerability/CVE-2026-98496

---
From sbomify Insights: https://insights.sbomify.com/CVE-2026-98496/
Summaries are generated and may contain mistakes; the official description above is the record.
