---
id: CVE-2026-98670
title: 'iio: adc: xilinx-xadc: free IRQ before cancelling the unmask worker on unbind'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  iio: adc: xilinx-xadc: free IRQ before cancelling the unmask worker on unbind

  The ZYNQ XADC alarm IRQ handler queues zynq_unmask_work via
  schedule_delayed_work(); that…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e <
    a29d385ad7b340c952a3935af2b33488db1eb3a6
  - >-
    Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e <
    a5fe2d1b55faba6d00fd87ad491b6cb603046304
  - >-
    Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e <
    49ea8a359e362bfbb32a647c8eb7962fbb37234e
  - >-
    Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e <
    0f3f427076240e75ff265e61645627a71ca4918c
  - Linux e96eb8853f334f96312968e4f01c5a452db54c00
  - Linux >= 5.10.200 < 5.11
  - Linux 5.12
published: '2026-10-18'
updated: '2026-10-18'
sourceUpdated: '2026-10-18T15:45:14.810Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98670'
references:
  - url: 'https://git.kernel.org/stable/c/a29d385ad7b340c952a3935af2b33488db1eb3a6'
  - url: 'https://git.kernel.org/stable/c/a5fe2d1b55faba6d00fd87ad491b6cb603046304'
  - url: 'https://git.kernel.org/stable/c/49ea8a359e362bfbb32a647c8eb7962fbb37234e'
  - url: 'https://git.kernel.org/stable/c/0f3f427076240e75ff265e61645627a71ca4918c'
tags:
  - cve.org
ingestedAt: '2026-10-18T16:47:32.532Z'
---

## Overview

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

iio: adc: xilinx-xadc: free IRQ before cancelling the unmask worker on unbind

The ZYNQ XADC alarm IRQ handler queues zynq_unmask_work via
schedule_delayed_work(); that work is cleared by a devm callback.
Register the devm callback before devm_request_irq() so the devres LIFO
teardown frees the IRQ first, ensuring the handler can no longer queue
work by the time the workqueue is cleared. Otherwise the handler could
re-arm the work and run it after the xadc structure has been freed.

This issue was found by an in-house static analysis tool.

## Affected

- `Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e < a29d385ad7b340c952a3935af2b33488db1eb3a6`
- `Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e < a5fe2d1b55faba6d00fd87ad491b6cb603046304`
- `Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e < 49ea8a359e362bfbb32a647c8eb7962fbb37234e`
- `Linux >= 2a9685d1a3b7644ca08d8355fc238b43faef7c3e < 0f3f427076240e75ff265e61645627a71ca4918c`
- `Linux e96eb8853f334f96312968e4f01c5a452db54c00`
- `Linux >= 5.10.200 < 5.11`
- `Linux 5.12`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
