Skip to content

Resolve empty backtraces when addr2line is not installed#2831

Merged
DL6ER merged 2 commits into
developmentfrom
tweak/backtrace
Apr 12, 2026
Merged

Resolve empty backtraces when addr2line is not installed#2831
DL6ER merged 2 commits into
developmentfrom
tweak/backtrace

Conversation

@DL6ER

@DL6ER DL6ER commented Apr 3, 2026

Copy link
Copy Markdown
Member

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:

  1. I have read and understood the contributors guide, as well as this entire template. I understand which branch to base my commits and Pull Requests against.
  2. I have commented my proposed changes within the code.
  3. I am willing to help maintain this change if there are issues with it later.
  4. It is compatible with the EUPL 1.2 license
  5. I have squashed any insignificant commits. (git rebase)

Checklist:

  • The code change is tested and works locally.
  • I based my code and PRs against the repositories development branch.
  • I signed off all commits. Pi-hole enforces the DCO for all contributions
  • I signed all my commits. Pi-hole requires signatures to verify authorship
  • I have read the above and my PR is ready for review.

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>
@DL6ER DL6ER added the Debugging label Apr 3, 2026
Copilot AI review requested due to automatic review settings April 3, 2026 19:02
@DL6ER DL6ER requested a review from a team as a code owner April 3, 2026 19:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 addr2line output (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 suggested addr2line commands for manual use after installing binutils.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/signals.c Outdated
Comment thread src/signals.c Outdated
@yubiuser

yubiuser commented Apr 6, 2026

Copy link
Copy Markdown
Member

binutils in case the tool was missing.

Have you seen this package being missed in the wild? I just checked and it's part of all supported distos pihole-meta package and we install in in docker as well.

@DL6ER

DL6ER commented Apr 9, 2026

Copy link
Copy Markdown
Member Author

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 yubiuser left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@DL6ER

DL6ER commented Apr 11, 2026

Copy link
Copy Markdown
Member Author

@yubiuser It is a false-positive. The CodeQL complaint is that we build a command using

addr2line -f -e \"%s\" %p

where %s is the binary's name (pihole-FTL in our case). We get it from argv[0]. It is the same you get for

echo $0

or similar. This is guaranteed to be the binary name where dangerous stuff like ; or similar is impossible in a binary's name. Hence, I flagged this false-positive.

@DL6ER DL6ER merged commit 20412bd into development Apr 12, 2026
25 of 26 checks passed
@DL6ER DL6ER deleted the tweak/backtrace branch April 12, 2026 09:54
@PromoFaux PromoFaux mentioned this pull request Apr 24, 2026
@pralor-bot

Copy link
Copy Markdown

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

github-actions Bot pushed a commit to bigbeartechworld/big-bear-universal-apps that referenced this pull request Apr 25, 2026
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 [@&#8203;SirRGB](https://redirect.github.com/SirRGB) in [#&#8203;2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025)

##### New Contributors

- [@&#8203;SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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

- [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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==-->
github-actions Bot pushed a commit to bigbeartechworld/big-bear-universal-apps that referenced this pull request Apr 25, 2026
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 [@&#8203;SirRGB](https://redirect.github.com/SirRGB) in [#&#8203;2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025)

#### New Contributors

- [@&#8203;SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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

- [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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 [@&#8203;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==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants