CVE Intelligence
Alta

CVE-2026-63894 — usb: gadget: f_fs: serialize DMABUF cancel against request completion

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_fs: serialize DMABUF cancel against request completion ffs_epfile_dmabuf_io_complete() calls usb_ep_free_request() on the completed request but leaves priv->req, the back-pointer that ffs_dmabuf_transfer() set on submission, pointing at the freed memory. A later FUNCTIONFS_DMABUF_DETACH ioctl or ffs_epfile_release() on the close path still sees priv->req non-NULL under ffs->eps_lock: if (priv->ep && priv->req) usb_ep_dequeue(priv->ep, priv->req); so usb_ep_dequeue() is called on a freed usb_request. On dummy_hcd the dequeue path only walks a live queue and pointer-compares, so the freed pointer reads without faulting and KASAN requires an explicit check at the FunctionFS call site to surface the use-after-free. On SG-capable in-tree UDCs the dequeue path dereferences the supplied request immediately: * chipidea's ep_dequeue() does container_of(req, struct ci_hw_req, req) and reads hwreq->req.status before acquiring its own lock. * cdnsp's cdnsp_gadget_ep_dequeue() reads request->status first. The narrower option of clearing priv->req via cmpxchg() in the completion does not close the race: the completion runs without eps_lock, so a cancel path holding eps_lock can still observe priv->req non-NULL, race a concurrent completion that clears and frees, and pass the freed pointer to usb_ep_dequeue(). A slightly longer fix that moves the free into the cleanup work is needed. Same class of lifetime race as the recent usbip-vudc timer fix [1]. Take eps_lock in the sole place that mutates priv->req from the callback direction by moving usb_ep_free_request() out of the completion into ffs_dmabuf_cleanup(), the existing work handler scheduled by ffs_dmabuf_signal_done() on ffs->io_completion_wq. Clear priv->req there under eps_lock before freeing, and only clear if priv->req still names our request (a subsequent ffs_dmabuf_transfer() on the same attachment may have queued a new one). This keeps the existing dummy_hcd sync-dequeue invariant: the completion callback is still invoked by the UDC without eps_lock held (dummy_hcd drops its own lock before calling the callback), and the callback now takes no f_fs lock at all. Serialization against the cancel path happens in cleanup, which runs from the workqueue with no f_fs lock held on entry. The priv ref count protects the containing ffs_dmabuf_priv: ffs_dmabuf_transfer() takes a ref via ffs_dmabuf_get(), cleanup drops it via ffs_dmabuf_put(), so priv stays live for the cleanup even after the cancel path's list_del + ffs_dmabuf_put. The ffs_dmabuf_transfer() error path no longer frees usb_req inline: fence->req and fence->ep are set before usb_ep_queue(), so ffs_dmabuf_cleanup() (scheduled by the error-path ffs_dmabuf_signal_done()) owns the free regardless of whether the queue succeeded. Reproduced under KASAN on both detach and close paths against dummy_hcd with an observability hook (kasan_check_byte(priv->req) immediately before usb_ep_dequeue) at the two FunctionFS cancel sites to surface the stale-pointer access; the hook is not part of this patch. The KASAN allocator / free stacks in the captured splats identify the same request: alloc in dummy_alloc_request, free in dummy_timer, fault reached from ffs_epfile_release (close) and from the FUNCTIONFS_DMABUF_DETACH ioctl (detach). With the patch applied, both paths are silent under the same hook. The bug is reached from the FunctionFS device node, which in real deployments is owned by the privileged gadget daemon (adbd, UMS, composite gadget services, etc.); it is not reachable from unprivileged userspace or from a USB host on the cable. FunctionFS mounts default to GLOBAL_ROOT_UID, but the filesystem supports uid=, gid=, and fmode= delegation to a non-root gadget daemon, so on real deployments the attacker may be a less-privileged service rather than root.

Descrição oficial em inglês (tradução ainda não revisada).

Publicada em 19/07/2026 · Atualizada em 15/10/2026 · Fontes: NIST National Vulnerability Database, CVE Program (cve.org) e CISA ADP · CNA: Linux

Quem explora e qual a prioridade

Nota de 0 a 100 que combina exploração confirmada, uso por ransomware e grupos APT, exploits públicos, EPSS e severidade.

Nenhum sinal de exploração nas fontes consultadas até agora.
Como a nota foi calculada
  • Severidade técnica (high)+6

A nota ordena a fila de correção; não substitui o contexto dos seus ativos (exposição à internet, criticidade, compensações).

Triagem

Está sendo explorada, qual a probabilidade de exploração, o que afeta e qual a severidade segundo as fontes.

Exploração
Não confirmada
Fora da CISA KEV — ausência de registro, não prova de que não é explorada.
EPSS FIRST
—
Sem pontuação EPSS.
Afeta
Linux
Linux
CVSS base
7.8
Alta · 2 fonte(s)

Remediação

Correções e mitigações documentadas pelas fontes — com link para o aviso original.

Nenhuma correção documentada pelas fontes consultadas. Isso não significa que não exista: verifique o aviso do fabricante.

Primeiras 24 horas

Ordenado a partir dos próprios campos do registro — exposição primeiro, porque não se corrige o que não se encontrou. Ponto de partida, gerado por regras.

  1. Identifique ativos expostos que executam as combinações de fabricante/produto/versão afetadas (Linux Linux).
  2. Nenhuma correção documentada nas fontes: reduza a exposição e monitore o aviso do fabricante.
  3. Procure nos logs disponíveis sinais de tentativa de exploração, erros e anomalias de autenticação.

Escopo afetado

Fabricante, produto e versões como as fontes os descrevem.

FabricanteProdutoVersõesStatusFonte
Linux Linux ≥ 7b07a2a7ca02a20124b552be96c5a56910795488 e < c872d8a065b3b499ce4c3ad168b5d34b68524f66≥ 7b07a2a7ca02a20124b552be96c5a56910795488 e < c7d421123b98d5e9c1c84bd9957aba36f1cbb4ca≥ 7b07a2a7ca02a20124b552be96c5a56910795488 e < 552dae28dbeb5f7c4fafcda43962dc46569f58a0≥ 7b07a2a7ca02a20124b552be96c5a56910795488 e < 2796646f6d892c1eb6818c7ca41fdfa12568e8d1versão 6.9 Vulnerável CVE Program (cve.org) e CISA ADP

Características do ataque

O vetor CVSS decodificado. Descreve o ataque, não a sua exposição a ele.

Vetor de ataque
Local
Complexidade
Baixa
Privilégios exigidos
Baixos
Interação do usuário
Nenhuma
Escopo
Inalterado
Confidencialidade
Alto
Integridade
Alto
Disponibilidade
Alto

Todas as pontuações coletadas

As fontes pontuam de forma independente e podem discordar; cada linha diz quem pontuou e em qual versão.

NotaVersãoSeveridadeExplor.ImpactoPontuado por
7.8 CVSS 3.1 Alta 1.8 5.9 416baaa9-dc9f-4396-8d5f-8c081fb06d67 via NIST National Vulnerability Database
7.8 CVSS 3.1 Alta — — Linux via CVE Program (cve.org) e CISA ADP
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (nota exibida no topo: 416baaa9-dc9f-4396-8d5f-8c081fb06d67)

Detecção

Derivado do vetor CVSS e da classe da fraqueza. Pontos de partida, não regras testadas.

  • Vetor local/físico: concentre-se em telemetria de endpoint (EDR) dos hosts afetados.
telemetria de endpoint (EDR)

Linha do tempo

O que aconteceu com esta CVE, do mais recente ao mais antigo.

  • 2026
  • Produtos afetados adicionados · linux/linux
    15/10/2026 · CVE Program (cve.org) e CISA ADP
  • Ficha publicada
    15/10/2026
  • CVSS alterado · 7.8
    15/10/2026 · NIST National Vulnerability Database
  • Status na fonte alterado · → Awaiting Analysis
    15/10/2026 · NIST National Vulnerability Database
  • Registro criado nesta base
    15/10/2026 · NIST National Vulnerability Database
  • CVE publicada
    19/07/2026 · Linux

Atividade das fontes

Leituras que se repetem foram contadas em vez de listadas.

  • 1× Descrição oficial atualizada · 15/10/2026 – 15/10/2026

Referências

4 no registro

Em outras páginas do site

Linux
todas as CVEs deste fabricante

CVEs relacionadas (mesmos produtos)

  • Crítica CVE-2026-99999 ipv4: validate checksum_start before completing checksum 10 h
  • Desconhecida CVE-2026-98432 ipv4: free inet_opt and ireq_opt after an RCU grace period 10 h
  • Desconhecida CVE-2026-98424 wifi: cfg80211: undo netns switch if renaming the wiphy fails 1 d
  • Desconhecida CVE-2026-98425 wifi: mac80211: don't warn when an IBSS has no channel to scan 1 d
  • Desconhecida CVE-2026-98426 wifi: mwifiex: fix IRQ leak using wrong index in MSI-X error path 1 d
  • Desconhecida CVE-2026-98427 net/sched: codel: bound the dropping loop per dequeue call 1 d

Não consta em nenhuma fonte consultada

Listado em vez de deixado em branco: um campo vazio e um não medido parecem iguais na tela, e só um deles é motivo para procurar em outro lugar.

  • Sem pontuação EPSS da FIRST.
  • Nenhuma versão corrigida, patch ou mitigação documentada.
  • Sem avaliação SSVC da CISA.
  • Sem classificação CWE.
  • Nenhum IOC confirmado (IPs, domínios, hashes ou artefatos de malware) fornecido.
  • Nenhum inventário de ativos, controle compensatório ou evidência de implantação de patch da sua organização.
  • Nenhuma captura de tráfego de exploração, amostra de log ou caso de incidente.

Respondido a partir deste registro

Texto montado apenas com os campos acima — sem afirmações adicionais.

O que os defensores devem saber primeiro?

CVE-2026-63894 é "usb: gadget: f_fs: serialize DMABUF cancel against request completion", de severidade Alta. Afeta Linux (Linux); as versões estão na tabela de escopo. Não está na CISA KEV, o que não exclui exploração. CVSS 7.8 descreve a severidade técnica. Verifique primeiro se ativos expostos ou críticos executam as versões afetadas, aplique as correções ou mitigações do fabricante e preserve logs para análise.

Comentários

Discussão técnica moderada. Leia as regras da comunidade.

Nenhum comentário ainda.

Entre ou crie uma conta para comentar e sugerir correções.