Skip to content

bugfix: clean pending operations in ordinary coroutines. - #2545

Merged
zhuizhuhaomeng merged 1 commit into
masterfrom
uaf-timer
Nov 6, 2026
Merged

zhuizhuhaomeng merged 1 commit into
masterfrom
uaf-timer

Conversation

@zhuizhuhaomeng

Copy link
Copy Markdown
Contributor

Cancel pending timers and cosocket operations before freeing request-owned coroutine contexts, including coroutines without Lua registry references. Previously, aborting a request with a nested ngx.sleep could leave its timer in the Nginx tree and trigger a heap use-after-free.

Add client-abort and ngx.exit regression coverage for pending sleeps in ordinary coroutines, including nesting across coroutine-context list parts.

Validated with the new test against a pre-fix ASan binary (both scenarios report UAF), then against the fixed build. t/077-sleep.t, t/091-coroutine.t, and t/197-coroutine-request-cleanup.t pass 460 assertions; client-abort suites pass 364 more. No ASan reports remain.

I hereby granted the copyright of the changes in this pull request
to the authors of this lua-nginx-module project.

Cancel pending timers and cosocket operations before freeing request-owned coroutine contexts, including coroutines without Lua registry references. Previously, aborting a request with a nested ngx.sleep could leave its timer in the Nginx tree and trigger a heap use-after-free.

Add client-abort and ngx.exit regression coverage for pending sleeps in ordinary coroutines, including nesting across coroutine-context list parts.

Validated with the new test against a pre-fix ASan binary (both scenarios report UAF), then against the fixed build. t/077-sleep.t, t/091-coroutine.t, and t/197-coroutine-request-cleanup.t pass 460 assertions; client-abort suites pass 364 more. No ASan reports remain.
@zhuizhuhaomeng
zhuizhuhaomeng merged commit 8df8ff0 into master Nov 6, 2026
6 checks passed
@zhuizhuhaomeng
zhuizhuhaomeng deleted the uaf-timer branch November 6, 2026 08:18
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