2026-02-14 16:27CVE-2026-23207Linux
PUBLISHED5.2

spi: tegra210-quad: Protect curr_xfer check in IRQ handler

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

spi: tegra210-quad: Protect curr_xfer check in IRQ handler

Now that all other accesses to curr_xfer are done under the lock,

protect the curr_xfer NULL check in tegra_qspi_isr_thread() with the

spinlock. Without this protection, the following race can occur:

CPU0 (ISR thread) CPU1 (timeout path)

---------------- -------------------

if (!tqspi->curr_xfer)

// sees non-NULL

spin_lock()

tqspi->curr_xfer = NULL

spin_unlock()

handle_*_xfer()

spin_lock()

t = tqspi->curr_xfer // NULL!

... t->len ... // NULL dereference!

With this patch, all curr_xfer accesses are now properly synchronized.

Although all accesses to curr_xfer are done under the lock, in

tegra_qspi_isr_thread() it checks for NULL, releases the lock and

reacquires it later in handle_cpu_based_xfer()/handle_dma_based_xfer().

There is a potential for an update in between, which could cause a NULL

pointer dereference.

To handle this, add a NULL check inside the handlers after acquiring

the lock. This ensures that if the timeout path has already cleared

curr_xfer, the handler will safely return without dereferencing the

NULL pointer.

Affected products

Linux

Linux

< 2ac3a105e51496147c0e44e49466eecfcc532d57 - AFFECTED

< edf9088b6e1d6d88982db7eb5e736a0e4fbcc09e - AFFECTED

88db8bb7ed1bb474618acdf05ebd4f0758d244e2 - AFFECTED

83309dd551cfd60a5a1a98d9cab19f435b44d46d - AFFECTED

c934e40246da2c5726d14e94719c514e30840df8 - AFFECTED

551060efb156c50fe33799038ba8145418cfdeef - AFFECTED

bb0c58be84f907285af45657c1d4847b960a12bf - AFFECTED

Linux

< 6.18.10 - AFFECTED

References

GitHub Security Advisories

GHSA-5xf5-gq7p-jfx7

In the Linux kernel, the following vulnerability has been resolved: spi: tegra210-quad: Protect...

https://github.com/advisories/GHSA-5xf5-gq7p-jfx7

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

spi: tegra210-quad: Protect curr_xfer check in IRQ handler

Now that all other accesses to curr_xfer are done under the lock, protect the curr_xfer NULL check in tegra_qspi_isr_thread() with the spinlock. Without this protection, the following race can occur:

CPU0 (ISR thread) CPU1 (timeout path)

if (!tqspi->curr_xfer) // sees non-NULL spin_lock() tqspi->curr_xfer = NULL spin_unlock() handle_*_xfer() spin_lock() t = tqspi->curr_xfer // NULL! ... t->len ... // NULL dereference!

With this patch, all curr_xfer accesses are now properly synchronized.

Although all accesses to curr_xfer are done under the lock, in tegra_qspi_isr_thread() it checks for NULL, releases the lock and reacquires it later in handle_cpu_based_xfer()/handle_dma_based_xfer(). There is a potential for an update in between, which could cause a NULL pointer dereference.

To handle this, add a NULL check inside the handlers after acquiring the lock. This ensures that if the timeout path has already cleared curr_xfer, the handler will safely return without dereferencing the NULL pointer.

JSON source

https://cveawg.mitre.org/api/cve/CVE-2026-23207
Click to expand
{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "cveMetadata": {
    "cveId": "CVE-2026-23207",
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "dateUpdated": "2026-02-14T16:27:29.762Z",
    "dateReserved": "2026-01-13T15:37:45.986Z",
    "datePublished": "2026-02-14T16:27:29.762Z",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "providerMetadata": {
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux",
        "dateUpdated": "2026-02-14T16:27:29.762Z"
      },
      "title": "spi: tegra210-quad: Protect curr_xfer check in IRQ handler",
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nspi: tegra210-quad: Protect curr_xfer check in IRQ handler\n\nNow that all other accesses to curr_xfer are done under the lock,\nprotect the curr_xfer NULL check in tegra_qspi_isr_thread() with the\nspinlock. Without this protection, the following race can occur:\n\n  CPU0 (ISR thread)              CPU1 (timeout path)\n  ----------------               -------------------\n  if (!tqspi->curr_xfer)\n    // sees non-NULL\n                                 spin_lock()\n                                 tqspi->curr_xfer = NULL\n                                 spin_unlock()\n  handle_*_xfer()\n    spin_lock()\n    t = tqspi->curr_xfer  // NULL!\n    ... t->len ...        // NULL dereference!\n\nWith this patch, all curr_xfer accesses are now properly synchronized.\n\nAlthough all accesses to curr_xfer are done under the lock, in\ntegra_qspi_isr_thread() it checks for NULL, releases the lock and\nreacquires it later in handle_cpu_based_xfer()/handle_dma_based_xfer().\nThere is a potential for an update in between, which could cause a NULL\npointer dereference.\n\nTo handle this, add a NULL check inside the handlers after acquiring\nthe lock. This ensures that if the timeout path has already cleared\ncurr_xfer, the handler will safely return without dereferencing the\nNULL pointer."
        }
      ],
      "affected": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "drivers/spi/spi-tegra210-quad.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "01bbf25c767219b14c3235bfa85906b8d2cb8fbc",
              "status": "affected",
              "versionType": "git",
              "lessThan": "2ac3a105e51496147c0e44e49466eecfcc532d57"
            },
            {
              "version": "b4e002d8a7cee3b1d70efad0e222567f92a73000",
              "status": "affected",
              "versionType": "git",
              "lessThan": "edf9088b6e1d6d88982db7eb5e736a0e4fbcc09e"
            },
            {
              "version": "88db8bb7ed1bb474618acdf05ebd4f0758d244e2",
              "status": "affected",
              "versionType": "git"
            },
            {
              "version": "83309dd551cfd60a5a1a98d9cab19f435b44d46d",
              "status": "affected",
              "versionType": "git"
            },
            {
              "version": "c934e40246da2c5726d14e94719c514e30840df8",
              "status": "affected",
              "versionType": "git"
            },
            {
              "version": "551060efb156c50fe33799038ba8145418cfdeef",
              "status": "affected",
              "versionType": "git"
            },
            {
              "version": "bb0c58be84f907285af45657c1d4847b960a12bf",
              "status": "affected",
              "versionType": "git"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "drivers/spi/spi-tegra210-quad.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "6.18.2",
              "status": "affected",
              "versionType": "semver",
              "lessThan": "6.18.10"
            }
          ]
        }
      ],
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/2ac3a105e51496147c0e44e49466eecfcc532d57"
        },
        {
          "url": "https://git.kernel.org/stable/c/edf9088b6e1d6d88982db7eb5e736a0e4fbcc09e"
        }
      ]
    }
  }
}