{"id":"RUSTSEC-2026-0221","aliases":[],"status":"published","title":"`event-listener` allows `!Send` tags to cross thread boundaries via `StackSlot`","description":"Affected versions of `event-listener` unconditionally implement `Send` and\n`Sync` for `StackSlot\u003c'_, T\u003e`, the stack-allocated listener type created\nby the `listener!` macro.\n\nThis allows a `!Send` tag type set via `Event::with_tag` to be moved to\nanother thread and accessed via `StackSlot::wait`, causing a data race in safe\ncode.","facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"published":"2026-07-13T12:00:00Z","modified":"2026-07-31T12:15:04Z","fixes":[{"ecosystem":"crates.io","package":"event-listener","fixed_in":["5.4.2"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"crates.io","package":"event-listener","ranges":[{"type":"SEMVER","events":[{"introduced":"5.1.0"},{"fixed":"5.4.2"}]}]}],"references":[{"url":"https://crates.io/crates/event-listener","tags":["package"]},{"url":"https://rustsec.org/advisories/RUSTSEC-2026-0221.html","tags":["advisory"]},{"url":"https://github.com/smol-rs/event-listener/pull/163","tags":["web"]}],"sources":{"osv":[{"id":"RUSTSEC-2026-0221","title":"`event-listener` allows `!Send` tags to cross thread boundaries via `StackSlot`","description":"Affected versions of `event-listener` unconditionally implement `Send` and\n`Sync` for `StackSlot\u003c'_, T\u003e`, the stack-allocated listener type created\nby the `listener!` macro.\n\nThis allows a `!Send` tag type set via `Event::with_tag` to be moved to\nanother thread and accessed via `StackSlot::wait`, causing a data race in safe\ncode.","status":"published","published":"2026-07-13T12:00:00Z","modified":"2026-07-31T12:15:04.629484145Z","updated_at":"2026-11-02T15:53:40.430679Z"}]}}
