RUSTSEC-2026-0253: Potential use-after-free due to lack of panic safety in `LruCache::pop()`

Open Beginner friendly
#47 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
68/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
rust
Domain
security

Research direction

Start by locating the repository's declaration of the lru dependency and its lockfile, then confirm where version 0.18.0 is selected. Compare the resolved version with the issue's stated fixed version, and run the repository's existing test or verification commands to confirm the dependency update does not break the project.

Written by the indexing model from the issue text.

Description

Potential use-after-free due to lack of panic safety in LruCache::pop()

Details
Status unsound
Package lru
Version 0.18.0
URL https://github.com/jeromefroe/lru-rs/pull/238
Date 2026-05-12

LruCache::pop() in lru was not panic-safe. If the Drop implementation of a stored key panics during pop(), self.detach() is never called, leaving dangling pointers in the internal doubly-linked list.

A subsequent cache operation that triggers eviction can then dereference these dangling pointers:

  • The node is freed from the map, but remains linked in the LRU list due to the skipped detach() call
  • When a new insertion causes eviction, the LRU traversal encounters the dangling pointer
  • This results in a write to already-freed memory during the eviction process

Impact

  • CWE-416 (Use-After-Free): memory corruption when subsequent cache operations access freed node pointers in the linked list
  • CWE-415 (Double Free): potential heap corruption when the same memory is freed multiple times

Both types of undefined behavior can be invoked in safe Rust, but only if unwinding panics are enabled and std::panic::catch_unwind is used with key types that have potentially-panicking Drop implementations.

Fix

Fixed in lru 0.18.2 by detaching the node from the linked list before freeing it and dropping the key (lru-rs#238).

See advisory page for additional details.

Dominant language
Rust
Stars
0
Forks
0
Avg merge
1d 14h
Merged PRs (30d)
5

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from entur/openapi-validator

All issues in entur/openapi-validator

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.