Make simulated WFP flow-context removal atomic and idempotent

Abierto
#345 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp
Área
networking

Línea de trabajo

Start with fwp_engine_t::test_remove_flow_context and delete_flow_context, where the shared-lock lookup of fwpm_flow_contexts is released before the exclusive-lock erase. Make find-and-erase one exclusive-lock section, copy the callback inputs, then call flowDeleteFn after unlocking. Done means concurrent removers invoke it at most once, absent entries return a defined status, and a concurrency test covers FwpsFlowRemoveContext0 against simulated deletion.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Problem

fwp_engine_t::test_remove_flow_context checks fwpm_flow_contexts under a shared lock, releases the lock, and then calls delete_flow_context, which reacquires an exclusive lock. Two concurrent removers can both observe the association. The winner erases it; the loser then finds no entry, asserts that the callout is non-null, and can invoke flowDeleteFn through a null pointer.

This occurs when simulated external flow deletion races with FwpsFlowRemoveContext during callout cleanup.

Originating review: https://github.com/microsoft/ebpf-for-windows/pull/5623#discussion_r4458625427

Desired behavior

Finding and claiming a flow-context association must be one atomic operation. Exactly one remover should own the association and invoke flowDeleteFn; later removers should receive a safe already-removed/not-found result.

The callback must still run after releasing the engine lock.

Acceptance criteria

  • Find-and-erase of fwpm_flow_contexts occurs under one exclusive lock.
  • The winning remover copies all callback inputs before releasing the lock.
  • flowDeleteFn is invoked outside the engine lock and at most once per association.
  • Missing or already-removed associations return a defined status/no-op without assertions or null dereferences.
  • FwpsFlowRemoveContext0 reports an appropriate status for an absent association.
  • A concurrency test runs cleanup removal and simulated flow deletion against the same flow.
Lenguaje dominante
C++
Estrellas
112
Forks
36
Merge medio
8 d 10 h
PR fusionados (30 d)
6

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/usersim

Todos los issues de microsoft/usersim

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.