CVE-2026-98749

Estado: RecibidaSin puntuar—
Gravedad—Sin puntuar
Probabilidad de explotación0.18 %mayor que el 7 % de las CVE
Explotación activaNono figura en el catálogo de CISA
Exploit públicoNo conocidosin código público localizado

En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:

tty: serial: max3100: detener el temporizador antes de liberar el puerto

max3100_shutdown() detiene el temporizador de sondeo, pero retorna antes de tiempo durante la suspensión del sistema. Si el dispositivo SPI se desvincula antes de la reanudación, el núcleo serie no vuelve a llamar a max3100_shutdown(), por lo que max3100_remove() libera el puerto mientras el temporizador sigue armado. max3100_timeout() puede entonces acceder al puerto liberado y volver a armar el temporizador.

Se añade la desactivación final del temporizador en max3100_remove() y se usa timer_shutdown_sync() para evitar que una devolución de llamada concurrente lo vuelva a armar.

Leer descripción completaMostrar menos

Además, allí se libera la IRQ y se destruye la cola de trabajo antes de liberar el puerto. Se mantiene timer_delete_sync() en max3100_shutdown() para que un open() posterior pueda volver a armar el temporizador.

La cola de trabajo se crea antes de request_irq() y se destruye tanto si request_irq() falla como en el cierre normal. Por tanto, su presencia en remove identifica la IRQ que queda registrada cuando la suspensión omite el cierre.

En max3100_shutdown() y max3100_remove() se libera la IRQ antes de destruir la cola de trabajo, y entre ambas operaciones se cancela el trabajo pendiente. free_irq() espera a que termine un manejador de interrupción en ejecución y después no puede iniciarse ningún manejador nuevo, por lo que un manejador concurrente no puede encolar trabajo en una cola de trabajo que se está destruyendo. La comprobación force_end_work en max3100_dowork() solo reduce esa ventana, ya que un manejador retrasado entre la comprobación y queue_work() podría seguir ejecutándose tras borrar el puntero de la cola de trabajo. Cancelar el trabajo también evita que destroy_workqueue() espere a un elemento de trabajo encolado en caso de que remove() se ejecute mientras la cola de trabajo freezable siga congelada, por ejemplo durante una eliminación del dispositivo en la ventana de reanudación, antes de que las colas de trabajo se descongelen.

Este problema fue detectado por una herramienta interna de análisis estático.

Traducción automática del texto original de NVD (en inglés).

CVSS

NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).

Probabilidad de explotación (EPSS)

Probabilidad de explotación en los próximos 30 días
0.18 %
Percentil entre todas las CVEs puntuadas
7
Fecha de la puntuación
20/10/2026

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

Tecnologías afectadas (1)

⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.

Referencias

Mostrar las 4 referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-98749",
  "cveTags": [],
  "metrics": {},
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "product": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7831d56b0a3544cbb6f82f76c34ca95e24d5b676",
              "lessThan": "fb668620e3b163962dabe1a674725a07aa44ff4a",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "7831d56b0a3544cbb6f82f76c34ca95e24d5b676",
              "lessThan": "2c8614981d3e6e000427de0ab2426ab68274d850",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "7831d56b0a3544cbb6f82f76c34ca95e24d5b676",
              "lessThan": "247b8f680876313586aed4d267bfcceddc2b4901",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "7831d56b0a3544cbb6f82f76c34ca95e24d5b676",
              "lessThan": "db0949bbd06db0a75b4b1076f1e25194be7d956a",
              "versionType": "git"
            }
          ],
          "programFiles": [
            "drivers/tty/serial/max3100.c"
          ],
          "defaultStatus": "unaffected"
        },
        {
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "product": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "2.6.30"
            },
            {
              "status": "unaffected",
              "version": "0",
              "lessThan": "2.6.30",
              "versionType": "semver"
            },
            {
              "status": "unaffected",
              "version": "6.12.113",
              "versionType": "semver",
              "lessThanOrEqual": "6.12.*"
            },
            {
              "status": "unaffected",
              "version": "6.18.56",
              "versionType": "semver",
              "lessThanOrEqual": "6.18.*"
            },
            {
              "status": "unaffected",
              "version": "7.2.10",
              "versionType": "semver",
              "lessThanOrEqual": "7.2.*"
            },
            {
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ],
          "programFiles": [
            "drivers/tty/serial/max3100.c"
          ],
          "defaultStatus": "affected"
        }
      ]
    }
  ],
  "published": "2026-10-18T16:17:28.660",
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/247b8f680876313586aed4d267bfcceddc2b4901",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/2c8614981d3e6e000427de0ab2426ab68274d850",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/db0949bbd06db0a75b4b1076f1e25194be7d956a",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/fb668620e3b163962dabe1a674725a07aa44ff4a",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ],
  "vulnStatus": "Received",
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntty: serial: max3100: shut down timer before freeing port\n\nmax3100_shutdown() stops the polling timer but returns early during\nsystem suspend. If the SPI device is unbound before resume, the serial\ncore does not call max3100_shutdown() again, so max3100_remove() frees\nthe port while the timer remains armed. max3100_timeout() may then\naccess the freed port and re-arm the timer.\n\nAdd final timer teardown to max3100_remove() and use\ntimer_shutdown_sync() to prevent a racing callback from re-arming it.\nAlso free the IRQ and destroy the workqueue there before freeing the\nport. Keep timer_delete_sync() in max3100_shutdown() so that a\nsubsequent open() can re-arm the timer.\n\nThe workqueue is created before request_irq() and destroyed on both\nrequest_irq() failure and normal shutdown. Its presence at remove thus\nidentifies the IRQ left registered when suspend bypasses shutdown.\n\nFree the IRQ before destroying the workqueue, in both\nmax3100_shutdown() and max3100_remove(), and cancel the pending work\nin between. free_irq() waits for a running interrupt handler to\nfinish and no new handler can start afterwards, so a racing handler\ncannot queue work on a workqueue that is being destroyed; the\nforce_end_work check in max3100_dowork() only narrows that window, as\na handler delayed between the check and queue_work() could still run\nafter the teardown has cleared the workqueue pointer. Cancelling the\nwork also keeps destroy_workqueue() from waiting on a queued work item\nin case remove() ever runs while the freezable workqueue is still\nfrozen, e.g. device removal during the resume window, before\nworkqueues are thawed.\n\nThis issue was found by an in-house static analysis tool."
    }
  ],
  "lastModified": "2026-10-19T10:19:39.070",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}