mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-24 18:30:38 -05:00
The typical sequence of events for AAAA queries which trigger recursion for an A RRset at the same name is as follows: 1. Original query context is created. 2. An AAAA RRset is found in cache. 3. Client-specific data is allocated from the filter-aaaa memory pool. 4. Recursion is triggered for an A RRset. 5. Original query context is torn down. 6. Recursion for an A RRset completes. 7. A second query context is created. 8. Client-specific data is retrieved from the filter-aaaa memory pool. 9. The response to be sent is processed according to configuration. 10. The response is sent. 11. Client-specific data is returned to the filter-aaaa memory pool. 12. The second query context is torn down. However, steps 6-12 are not executed if recursion for an A RRset is canceled. Thus, if named is in the process of recursing for A RRsets when a shutdown is requested, the filter-aaaa memory pool will have outstanding allocations which will never get released. This in turn leads to a crash since every memory pool must not have any outstanding allocations by the time isc_mempool_destroy() is called. Fix by creating a stub query context whenever fetch_callback() is called, including cancellation events. When the qctx is destroyed, it will ensure the client is detached and the plugin memory is freed. |
||
|---|---|---|
| .. | ||
| bind9 | ||
| dns | ||
| irs | ||
| isc | ||
| isccc | ||
| isccfg | ||
| ns | ||
| samples | ||
| win32/bindevt | ||
| .gitignore | ||
| Makefile.am | ||
| unit-test-driver.sh.in | ||