Skip to content

audit: require race refcount budget on both sides before claiming UAF - #8

Open
rikvanriel wants to merge 1 commit into
masoncl:mainfrom
rikvanriel:fix/race-refcount-budget
Open

rikvanriel wants to merge 1 commit into
masoncl:mainfrom
rikvanriel:fix/race-refcount-budget

Conversation

@rikvanriel

Copy link
Copy Markdown
Contributor

For any suspected race claiming use-after-free via async work, RCU callback, or workqueue, require tracing reference counts on both sides back far enough to prove with certainty that one side lacks the reference needed to keep the object alive. Enumerate every acquire that pins the shared pointer and every release, build the reference budget at the claimed free point.

If the cached pointer itself holds a pinning reference, free is blocked until that reference is dropped — at most a prompt-reclaim or cgroup-removal stall, not a use-after-free. Distinguish storage-free vs logical free (pool return): for permanently mapped or pooled storage, return-to-pool is a logical free even though reads do not fault; a read is reportable only when stale value drives a decision, a write is always reportable because it corrupts the next owner's reuse.

Mirrors review-prompts kernel/technical-patterns, false-positive- guide 8.2, callstack resource.4b, mm-reclaim, and kernel-style CL-30 fix/race-refcount-budget. Prevents memcg per-CPU stock false positives while preserving hugetlb bare-pointer waits as true positives.

For any suspected race claiming use-after-free via async work, RCU
callback, or workqueue, require tracing reference counts on both
sides back far enough to prove with certainty that one side lacks
the reference needed to keep the object alive. Enumerate every
acquire that pins the shared pointer and every release, build the
reference budget at the claimed free point.

If the cached pointer itself holds a pinning reference, free is
blocked until that reference is dropped — at most a prompt-reclaim
or cgroup-removal stall, not a use-after-free. Distinguish
storage-free vs logical free (pool return): for permanently mapped
or pooled storage, return-to-pool is a logical free even though reads
do not fault; a read is reportable only when stale value drives a
decision, a write is always reportable because it corrupts the next
owner's reuse.

Mirrors review-prompts kernel/technical-patterns, false-positive-
guide 8.2, callstack resource.4b, mm-reclaim, and kernel-style CL-30
fix/race-refcount-budget. Prevents memcg per-CPU stock false
positives while preserving hugetlb bare-pointer waits as true
positives.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant