Resolve empty backtraces when addr2line is not installed#2831
Conversation
When addr2line was absent from the runtime system, popen() succeeded but produced no output, leaving func as an empty string. The check `strcmp(func, "??")` did not match "", so the code fell through to the success branch and logged only bare frame numbers (#0, #1, ...) with no addresses or symbols. Fix the condition to also check for empty func, so the dladdr() and /proc/self/maps fallbacks execute correctly. Additionally, when any frame cannot be resolved, print the addr2line commands the user can run manually after installing binutils in case the tool was missing. Signed-off-by: Dominik <dl6er@dl6er.de>
There was a problem hiding this comment.
Pull request overview
Fixes missing symbol/address output in crash backtraces when addr2line is absent (or produces no stdout), ensuring the dladdr() and /proc/self/maps fallbacks run and improving user guidance for manual symbolization.
Changes:
- Treat empty
addr2lineoutput (func == "") as unresolved so fallback resolution paths execute. - Change
log_frame()to return a boolean and use it to decide whether to print additional symbolization guidance. - When any frame is not resolved via
addr2line, log suggestedaddr2linecommands for manual use after installing binutils.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Have you seen this package being missed in the wild? I just checked and it's part of all supported distos |
|
I have no better explanation as to why the backtrace was completely empty in the referenced issue. |
Signed-off-by: Dominik <dl6er@dl6er.de>
yubiuser
left a comment
There was a problem hiding this comment.
There is one CodeQL failure: https://github.com/pi-hole/FTL/runs/70673223990?pr=2831
|
@yubiuser It is a false-positive. The CodeQL complaint is that we build a command using where echo $0or similar. This is guaranteed to be the binary name where dangerous stuff like |
|
This pull request has been mentioned on Pi-hole Userspace. There might be relevant details there: https://discourse.pi-hole.net/t/pi-hole-ftl-v6-6-1-and-core-v6-4-2-released/85843/1 |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [pihole/pihole](https://redirect.github.com/pi-hole/docker-pi-hole) | patch | `2026.04.0` → `2026.04.1` | --- ### Release Notes <details> <summary>pi-hole/docker-pi-hole (pihole/pihole)</summary> ### [`v2026.04.1`](https://redirect.github.com/pi-hole/docker-pi-hole/releases/tag/2026.04.1) [Compare Source](https://redirect.github.com/pi-hole/docker-pi-hole/compare/2026.04.0...2026.04.1) <!-- Release notes generated using configuration in .github/release.yml at master --> ##### What's Changed - docs: update capability documentation links by [@​SirRGB](https://redirect.github.com/SirRGB) in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) ##### New Contributors - [@​SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) **Full Changelog**: <pi-hole/docker-pi-hole@2026.04.0...2026.04.1> ##### New component versions included in this tag: ##### What's Changed (FTL v6.6.1) - Add new `GET /api/config/_properties` endpoint by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2356](https://redirect.github.com/pi-hole/FTL/pull/2356) - Fix thread-safety issues causing SIGSEGV under concurrent API load by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2835](https://redirect.github.com/pi-hole/FTL/pull/2835) - fix: fix rare race condition for SHM strings in API handlers by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2833](https://redirect.github.com/pi-hole/FTL/pull/2833) - Accept punycode domains that libidn2 rejects under IDNA2008 by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2838](https://redirect.github.com/pi-hole/FTL/pull/2838) - Improve shutdown diagnostics to identify SIGTERM source by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2839](https://redirect.github.com/pi-hole/FTL/pull/2839) - Resolve empty backtraces when addr2line is not installed by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2831](https://redirect.github.com/pi-hole/FTL/pull/2831) - Improve thread-safety for concurrent API requests by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2847](https://redirect.github.com/pi-hole/FTL/pull/2847) - Don't skip device lookup when resolver.macNames is disabled by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2846](https://redirect.github.com/pi-hole/FTL/pull/2846) - Fix linker error when compiling w/o optimization by [@​aeolio](https://redirect.github.com/aeolio) in [pi-hole/FTL#2850](https://redirect.github.com/pi-hole/FTL/pull/2850) - Clarify `dns.blockESNI` wording by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) - Preserve log file path config when fopen fails by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2834](https://redirect.github.com/pi-hole/FTL/pull/2834) ##### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) and [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) - <GHSA-9cqv-839p-gpq2> - Fixed with : [pi-hole/FTL@`0c46e4e`](https://redirect.github.com/pi-hole/FTL/commit/0c46e4ec7fe57f762fce261625f2cf5d43806e6d) ##### New Contributors - [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) made their first contribution in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) **Full Changelog**: <pi-hole/FTL@v6.6...v6.6.1> ##### What's Changed (Core v6.4.2) - Wipe version file before creating a new one by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6538](https://redirect.github.com/pi-hole/pi-hole/pull/6538) - Fix ownership permissions for containing directories in fix\_owner\_per… by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6589](https://redirect.github.com/pi-hole/pi-hole/pull/6589) - Remove reference to /usr/local/bin/COL\_TABLE by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6594](https://redirect.github.com/pi-hole/pi-hole/pull/6594) - Skip apt cache update when pihole-meta is current by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6581](https://redirect.github.com/pi-hole/pi-hole/pull/6581) - Set versions in /etc/pihole/versions to null if script fails by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6550](https://redirect.github.com/pi-hole/pi-hole/pull/6550) - Remove redundant touching of logfiles from systemd Service by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6601](https://redirect.github.com/pi-hole/pi-hole/pull/6601) - Loosen requirements for local file access for gravity by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6430](https://redirect.github.com/pi-hole/pi-hole/pull/6430) - Fix permission for \*.etag files after gravity run by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6353](https://redirect.github.com/pi-hole/pi-hole/pull/6353) - add logrotate to DEB and RPM dependencies by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6524](https://redirect.github.com/pi-hole/pi-hole/pull/6524) - Improve gravity error message including curl exit code and errormsg by [@​rdwebdesign](https://redirect.github.com/rdwebdesign) in [pi-hole/pi-hole#6605](https://redirect.github.com/pi-hole/pi-hole/pull/6605) ##### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) and [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) **Full Changelog**: <pi-hole/pi-hole@v6.4.1...v6.4.2> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/bigbeartechworld/big-bear-universal-apps). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [jacklul/pihole](https://redirect.github.com/pi-hole/docker-pi-hole) | patch | `2026.04.0` → `2026.04.1` | --- ### Release Notes <details> <summary>pi-hole/docker-pi-hole (jacklul/pihole)</summary> ### [`v2026.04.1`](https://redirect.github.com/pi-hole/docker-pi-hole/releases/tag/2026.04.1) [Compare Source](https://redirect.github.com/pi-hole/docker-pi-hole/compare/2026.04.0...2026.04.1) <!-- Release notes generated using configuration in .github/release.yml at master --> #### What's Changed - docs: update capability documentation links by [@​SirRGB](https://redirect.github.com/SirRGB) in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) #### New Contributors - [@​SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) **Full Changelog**: <pi-hole/docker-pi-hole@2026.04.0...2026.04.1> #### New component versions included in this tag: #### What's Changed (FTL v6.6.1) - Add new `GET /api/config/_properties` endpoint by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2356](https://redirect.github.com/pi-hole/FTL/pull/2356) - Fix thread-safety issues causing SIGSEGV under concurrent API load by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2835](https://redirect.github.com/pi-hole/FTL/pull/2835) - fix: fix rare race condition for SHM strings in API handlers by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2833](https://redirect.github.com/pi-hole/FTL/pull/2833) - Accept punycode domains that libidn2 rejects under IDNA2008 by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2838](https://redirect.github.com/pi-hole/FTL/pull/2838) - Improve shutdown diagnostics to identify SIGTERM source by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2839](https://redirect.github.com/pi-hole/FTL/pull/2839) - Resolve empty backtraces when addr2line is not installed by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2831](https://redirect.github.com/pi-hole/FTL/pull/2831) - Improve thread-safety for concurrent API requests by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2847](https://redirect.github.com/pi-hole/FTL/pull/2847) - Don't skip device lookup when resolver.macNames is disabled by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2846](https://redirect.github.com/pi-hole/FTL/pull/2846) - Fix linker error when compiling w/o optimization by [@​aeolio](https://redirect.github.com/aeolio) in [pi-hole/FTL#2850](https://redirect.github.com/pi-hole/FTL/pull/2850) - Clarify `dns.blockESNI` wording by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) - Preserve log file path config when fopen fails by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2834](https://redirect.github.com/pi-hole/FTL/pull/2834) #### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) and [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) - <GHSA-9cqv-839p-gpq2> - Fixed with : [pi-hole/FTL@`0c46e4e`](https://redirect.github.com/pi-hole/FTL/commit/0c46e4ec7fe57f762fce261625f2cf5d43806e6d) #### New Contributors - [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) made their first contribution in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) **Full Changelog**: <pi-hole/FTL@v6.6...v6.6.1> #### What's Changed (Core v6.4.2) - Wipe version file before creating a new one by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6538](https://redirect.github.com/pi-hole/pi-hole/pull/6538) - Fix ownership permissions for containing directories in fix\_owner\_per… by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6589](https://redirect.github.com/pi-hole/pi-hole/pull/6589) - Remove reference to /usr/local/bin/COL\_TABLE by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6594](https://redirect.github.com/pi-hole/pi-hole/pull/6594) - Skip apt cache update when pihole-meta is current by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6581](https://redirect.github.com/pi-hole/pi-hole/pull/6581) - Set versions in /etc/pihole/versions to null if script fails by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6550](https://redirect.github.com/pi-hole/pi-hole/pull/6550) - Remove redundant touching of logfiles from systemd Service by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6601](https://redirect.github.com/pi-hole/pi-hole/pull/6601) - Loosen requirements for local file access for gravity by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6430](https://redirect.github.com/pi-hole/pi-hole/pull/6430) - Fix permission for \*.etag files after gravity run by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6353](https://redirect.github.com/pi-hole/pi-hole/pull/6353) - add logrotate to DEB and RPM dependencies by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6524](https://redirect.github.com/pi-hole/pi-hole/pull/6524) - Improve gravity error message including curl exit code and errormsg by [@​rdwebdesign](https://redirect.github.com/rdwebdesign) in [pi-hole/pi-hole#6605](https://redirect.github.com/pi-hole/pi-hole/pull/6605) #### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) and [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) **Full Changelog**: <pi-hole/pi-hole@v6.4.1...v6.4.2> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/bigbeartechworld/big-bear-universal-apps). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->
What does this implement/fix?
When addr2line was absent from the runtime system, popen() succeeded but produced no output, leaving func as an empty string. The check
strcmp(func, "??")did not match "", so the code fell through to the success branch and logged only bare frame numbers (#0, #1, ...) with no addresses or symbols.Fix the condition to also check for empty func, so the dladdr() and /proc/self/maps fallbacks execute correctly. Additionally, when any frame cannot be resolved, print the addr2line commands the user can run manually after installing binutils in case the tool was missing.
Related issue or feature (if applicable): N/A
Pull request in docs with documentation (if applicable): N/A
By submitting this pull request, I confirm the following:
git rebase)Checklist:
developmentbranch.