[GH-ISSUE #5638] NetBird UI (netbird-ui) crashes with SIGSEGV on Apple M5 Max — go-m1cpu v0.1.6 incompatibility #11572

Open
opened 2026-08-05 01:30:04 -04:00 by saavagebueno · 4 comments
Owner

Originally created by @NoorChasib on GitHub (Mar 20, 2026).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/5638

Describe the problem

The NetBird UI binary (netbird-ui) crashes immediately on launch with a segmentation fault on a MacBook Pro with an M5 Max chip. The crash occurs during initialization of the go-m1cpu library (v0.1.6) before any UI renders. The daemon (netbird service run) works fine. Only the UI/menu bar component is affected.

This appears to be because go-m1cpu v0.1.6 does not recognize the M5 Max chip, causing _Cfunc_initialize() to dereference a null pointer.

To Reproduce

  1. Install NetBird v0.66.4 via the official .pkg installer on a Mac with an Apple M5 Max chip
  2. Open /Applications/NetBird.app - no menu bar item appears
  3. Run /Applications/NetBird.app/Contents/MacOS/netbird-ui directly from terminal
  4. Observe immediate SIGSEGV crash

Expected behavior

The NetBird menu bar UI should launch and connect to the running daemon.

Are you using NetBird Cloud?

No, self-hosted.

NetBird version

0.66.4

Is any other VPN software installed?

No.

Debug output

Daemon status: NeedsLogin

(Unable to provide full debug output. Daemon is running but not authenticated. The UI crash prevents SSO login via the menu bar, and the issue occurs before any network activity.)

Crash trace

Full crash trace
/Applications/NetBird.app/Contents/MacOS/netbird-ui

SIGSEGV: segmentation violation
PC=0x182b314f8 m=0 sigcode=2 addr=0x0
signal arrived during cgo execution

goroutine 1 gp=0x140000021c0 m=0 mp=0x106722a60 [syscall, locked to thread]:
runtime.cgocall(0x1050824f8, 0x140000a2e08)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/cgocall.go:167 +0x44 fp=0x140000a2dd0 sp=0x140000a2d90 pc=0x104583244
github.com/shoenig/go-m1cpu._Cfunc_initialize()
        _cgo_gotypes.go:150 +0x2c fp=0x140000a2e00 sp=0x140000a2dd0 pc=0x104ee464c
github.com/shoenig/go-m1cpu.init.0()
        /Users/runner/go/pkg/mod/github.com/shoenig/go-m1cpu@v0.1.6/cpu.go:148 +0x1c fp=0x140000a2e10 sp=0x140000a2e00 pc=0x104ee468c
runtime.doInit1(0x105f47780)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:7670 +0xc4 fp=0x140000a2f40 sp=0x140000a2e10 pc=0x104562d44
runtime.doInit(...)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:7637
runtime.main()
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:256 +0x338 fp=0x140000a2fd0 sp=0x140000a2f40 pc=0x104552e78
runtime.goexit({})
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x140000a2fd0 sp=0x140000a2fd0 pc=0x10458e424

goroutine 2 gp=0x14000002c40 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000092f90 sp=0x14000092f70 pc=0x1045862d0
runtime.goparkunlock(...)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466
runtime.forcegchelper()
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:373 +0xb4 fp=0x14000092fd0 sp=0x14000092f90 pc=0x104553104
runtime.goexit({})
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x14000092fd0 sp=0x14000092fd0 pc=0x10458e424
created by runtime.init.7 in goroutine 1
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:361 +0x24

goroutine 3 gp=0x14000003180 m=nil [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000093760 sp=0x14000093740 pc=0x1045862d0
runtime.goparkunlock(...)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466
runtime.bgsweep(0x140000be000)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcsweep.go:279 +0x9c fp=0x140000937b0 sp=0x14000093760 pc=0x10453db6c
runtime.gcenable.gowrap1()
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:212 +0x28 fp=0x140000937d0 sp=0x140000937b0 pc=0x104531838
runtime.goexit({})
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x140000937d0 sp=0x140000937d0 pc=0x10458e424
created by runtime.gcenable in goroutine 1
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:212 +0x6c

goroutine 4 gp=0x14000003340 m=nil [GC scavenge wait]:
runtime.gopark(0x140000be000?, 0x1052685b0?, 0x1?, 0x0?, 0x14000003340?)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000093f60 sp=0x14000093f40 pc=0x1045862d0
runtime.goparkunlock(...)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466
runtime.(*scavengerState).park(0x106720e60)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcscavenge.go:425 +0x5c fp=0x14000093f90 sp=0x14000093f60 pc=0x10453b6fc
runtime.bgscavenge(0x140000be000)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcscavenge.go:653 +0x44 fp=0x14000093fb0 sp=0x14000093f90 pc=0x10453bc34
runtime.gcenable.gowrap2()
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:213 +0x28 fp=0x14000093fd0 sp=0x14000093fb0 pc=0x1045317d8
runtime.goexit({})
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x14000093fd0 sp=0x14000093fd0 pc=0x10458e424
created by runtime.gcenable in goroutine 1
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:213 +0xac

goroutine 18 gp=0x14000102380 m=nil [GOMAXPROCS updater (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x1400008e770 sp=0x1400008e750 pc=0x1045862d0
runtime.goparkunlock(...)
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466
runtime.updateMaxProcsGoroutine()
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:6720 +0xf4 fp=0x1400008e7d0 sp=0x1400008e770 pc=0x104561ad4
runtime.goexit({})
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x1400008e7d0 sp=0x1400008e7d0 pc=0x10458e424
created by runtime.defaultGOMAXPROCSUpdateEnable in goroutine 1
        /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:6708 +0x48

r0      0x14
r1      0x0
r2      0x0
r3      0x16b8ee380
r4      0xffffffff9be0f9d0
r5      0x20
r6      0x48
r7      0x0
r8      0x5d117f7f420a001c
r9      0x5d117f7f420a001c
r10     0x7ffffffffffff8
r11     0x0
r12     0x100000003
r13     0xdfa
r14     0x6e
r15     0x12
r16     0x182a30668
r17     0x1f025bd40
r18     0x0
r19     0x0
r20     0x465000
r21     0x1076fdcc0
r22     0x106c73df4
r23     0x1eec9c9e0
r24     0x1
r25     0x16b8eeab0
r26     0x105f47788
r27     0x820
r28     0x106721980
r29     0x16b8ee3b0
lr      0x182a30688
sp      0x16b8ee3a0
pc      0x182b314f8
fault   0x0

Screenshots

N/A - the UI never renders. The menu bar item does not appear at all.

Additional context

  • Machine: MacBook Pro 14" with Apple M5 Max, macOS Tahoe 26.3.1 (Build 25D2128)
  • Install method: Fresh .pkg install from official NetBird releases. All previous NetBird files were fully removed beforehand (this machine was migrated from an older MacBook via Migration Assistant, which left behind stale state from a prior install).
  • The daemon runs correctly via CLI (/usr/local/bin/netbird service run) and is visible in launchctl list
  • The CLI binary at /Applications/NetBird.app/Contents/MacOS/netbird also works fine
  • Only /Applications/NetBird.app/Contents/MacOS/netbird-ui crashes
  • The crash occurs at package init time in github.com/shoenig/go-m1cpu@v0.1.6 — the init() function calls the CGo _Cfunc_initialize() which reads Apple Silicon CPU topology via IOKit. The M5 Max chip is not recognized by this library version, causing a null pointer dereference (addr=0x0).
  • Likely fix: Bump the go-m1cpu dependency to a version that includes M5 chip identifiers.

Have you tried these troubleshooting steps?

  • Reviewed client troubleshooting
  • Checked for newer NetBird versions
  • Searched for similar issues on GitHub (including closed ones)
  • Restarted the NetBird client
  • Disabled other VPN software
  • Checked firewall settings
Originally created by @NoorChasib on GitHub (Mar 20, 2026). Original GitHub issue: https://github.com/netbirdio/netbird/issues/5638 ## Describe the problem The NetBird UI binary (`netbird-ui`) crashes immediately on launch with a segmentation fault on a MacBook Pro with an M5 Max chip. The crash occurs during initialization of the `go-m1cpu` library (v0.1.6) before any UI renders. The daemon (`netbird service run`) works fine. Only the UI/menu bar component is affected. This appears to be because `go-m1cpu` v0.1.6 does not recognize the M5 Max chip, causing `_Cfunc_initialize()` to dereference a null pointer. ## To Reproduce 1. Install NetBird v0.66.4 via the official `.pkg` installer on a Mac with an Apple M5 Max chip 2. Open `/Applications/NetBird.app` - no menu bar item appears 3. Run `/Applications/NetBird.app/Contents/MacOS/netbird-ui` directly from terminal 4. Observe immediate SIGSEGV crash ## Expected behavior The NetBird menu bar UI should launch and connect to the running daemon. ## Are you using NetBird Cloud? No, self-hosted. ## NetBird version ``` 0.66.4 ``` ## Is any other VPN software installed? No. ## Debug output ``` Daemon status: NeedsLogin ``` (Unable to provide full debug output. Daemon is running but not authenticated. The UI crash prevents SSO login via the menu bar, and the issue occurs before any network activity.) ## Crash trace <details> <summary>Full crash trace</summary> ``` /Applications/NetBird.app/Contents/MacOS/netbird-ui SIGSEGV: segmentation violation PC=0x182b314f8 m=0 sigcode=2 addr=0x0 signal arrived during cgo execution goroutine 1 gp=0x140000021c0 m=0 mp=0x106722a60 [syscall, locked to thread]: runtime.cgocall(0x1050824f8, 0x140000a2e08) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/cgocall.go:167 +0x44 fp=0x140000a2dd0 sp=0x140000a2d90 pc=0x104583244 github.com/shoenig/go-m1cpu._Cfunc_initialize() _cgo_gotypes.go:150 +0x2c fp=0x140000a2e00 sp=0x140000a2dd0 pc=0x104ee464c github.com/shoenig/go-m1cpu.init.0() /Users/runner/go/pkg/mod/github.com/shoenig/go-m1cpu@v0.1.6/cpu.go:148 +0x1c fp=0x140000a2e10 sp=0x140000a2e00 pc=0x104ee468c runtime.doInit1(0x105f47780) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:7670 +0xc4 fp=0x140000a2f40 sp=0x140000a2e10 pc=0x104562d44 runtime.doInit(...) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:7637 runtime.main() /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:256 +0x338 fp=0x140000a2fd0 sp=0x140000a2f40 pc=0x104552e78 runtime.goexit({}) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x140000a2fd0 sp=0x140000a2fd0 pc=0x10458e424 goroutine 2 gp=0x14000002c40 m=nil [force gc (idle)]: runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000092f90 sp=0x14000092f70 pc=0x1045862d0 runtime.goparkunlock(...) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466 runtime.forcegchelper() /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:373 +0xb4 fp=0x14000092fd0 sp=0x14000092f90 pc=0x104553104 runtime.goexit({}) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x14000092fd0 sp=0x14000092fd0 pc=0x10458e424 created by runtime.init.7 in goroutine 1 /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:361 +0x24 goroutine 3 gp=0x14000003180 m=nil [GC sweep wait]: runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000093760 sp=0x14000093740 pc=0x1045862d0 runtime.goparkunlock(...) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466 runtime.bgsweep(0x140000be000) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcsweep.go:279 +0x9c fp=0x140000937b0 sp=0x14000093760 pc=0x10453db6c runtime.gcenable.gowrap1() /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:212 +0x28 fp=0x140000937d0 sp=0x140000937b0 pc=0x104531838 runtime.goexit({}) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x140000937d0 sp=0x140000937d0 pc=0x10458e424 created by runtime.gcenable in goroutine 1 /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:212 +0x6c goroutine 4 gp=0x14000003340 m=nil [GC scavenge wait]: runtime.gopark(0x140000be000?, 0x1052685b0?, 0x1?, 0x0?, 0x14000003340?) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x14000093f60 sp=0x14000093f40 pc=0x1045862d0 runtime.goparkunlock(...) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466 runtime.(*scavengerState).park(0x106720e60) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcscavenge.go:425 +0x5c fp=0x14000093f90 sp=0x14000093f60 pc=0x10453b6fc runtime.bgscavenge(0x140000be000) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgcscavenge.go:653 +0x44 fp=0x14000093fb0 sp=0x14000093f90 pc=0x10453bc34 runtime.gcenable.gowrap2() /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:213 +0x28 fp=0x14000093fd0 sp=0x14000093fb0 pc=0x1045317d8 runtime.goexit({}) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x14000093fd0 sp=0x14000093fd0 pc=0x10458e424 created by runtime.gcenable in goroutine 1 /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/mgc.go:213 +0xac goroutine 18 gp=0x14000102380 m=nil [GOMAXPROCS updater (idle)]: runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:460 +0xc0 fp=0x1400008e770 sp=0x1400008e750 pc=0x1045862d0 runtime.goparkunlock(...) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:466 runtime.updateMaxProcsGoroutine() /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:6720 +0xf4 fp=0x1400008e7d0 sp=0x1400008e770 pc=0x104561ad4 runtime.goexit({}) /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/asm_arm64.s:1268 +0x4 fp=0x1400008e7d0 sp=0x1400008e7d0 pc=0x10458e424 created by runtime.defaultGOMAXPROCSUpdateEnable in goroutine 1 /Users/runner/hostedtoolcache/go/1.25.7/arm64/src/runtime/proc.go:6708 +0x48 r0 0x14 r1 0x0 r2 0x0 r3 0x16b8ee380 r4 0xffffffff9be0f9d0 r5 0x20 r6 0x48 r7 0x0 r8 0x5d117f7f420a001c r9 0x5d117f7f420a001c r10 0x7ffffffffffff8 r11 0x0 r12 0x100000003 r13 0xdfa r14 0x6e r15 0x12 r16 0x182a30668 r17 0x1f025bd40 r18 0x0 r19 0x0 r20 0x465000 r21 0x1076fdcc0 r22 0x106c73df4 r23 0x1eec9c9e0 r24 0x1 r25 0x16b8eeab0 r26 0x105f47788 r27 0x820 r28 0x106721980 r29 0x16b8ee3b0 lr 0x182a30688 sp 0x16b8ee3a0 pc 0x182b314f8 fault 0x0 ``` </details> ## Screenshots N/A - the UI never renders. The menu bar item does not appear at all. ## Additional context - **Machine:** MacBook Pro 14" with Apple M5 Max, macOS Tahoe 26.3.1 (Build 25D2128) - **Install method:** Fresh `.pkg` install from official NetBird releases. All previous NetBird files were fully removed beforehand (this machine was migrated from an older MacBook via Migration Assistant, which left behind stale state from a prior install). - The daemon runs correctly via CLI (`/usr/local/bin/netbird service run`) and is visible in `launchctl list` - The CLI binary at `/Applications/NetBird.app/Contents/MacOS/netbird` also works fine - Only `/Applications/NetBird.app/Contents/MacOS/netbird-ui` crashes - The crash occurs at package init time in `github.com/shoenig/go-m1cpu@v0.1.6` — the `init()` function calls the CGo `_Cfunc_initialize()` which reads Apple Silicon CPU topology via IOKit. The M5 Max chip is not recognized by this library version, causing a null pointer dereference (`addr=0x0`). - **Likely fix:** Bump the `go-m1cpu` dependency to a version that includes M5 chip identifiers. ## Have you tried these troubleshooting steps? - [x] Reviewed [client troubleshooting](https://docs.netbird.io/how-to/troubleshooting-client) - [x] Checked for newer NetBird versions - [x] Searched for similar issues on GitHub (including closed ones) - [x] Restarted the NetBird client - [x] Disabled other VPN software - [x] Checked firewall settings
saavagebueno added the triage-needed label 2026-08-05 01:30:04 -04:00
Author
Owner

@NoorChasib commented on GitHub (Mar 21, 2026):

bump for exposure.

<!-- gh-comment-id:4103698433 --> @NoorChasib commented on GitHub (Mar 21, 2026): bump for exposure.
Author
Owner

@ENVIOTECH-GmbH commented on GitHub (Mar 22, 2026):

... same for M5 Pro

<!-- gh-comment-id:4106248400 --> @ENVIOTECH-GmbH commented on GitHub (Mar 22, 2026): ... same for M5 Pro
Author
Owner

@isapiou commented on GitHub (Mar 25, 2026):

... same here with M5 Pro

<!-- gh-comment-id:4128132823 --> @isapiou commented on GitHub (Mar 25, 2026): ... same here with M5 Pro
Author
Owner

@NoorChasib commented on GitHub (Mar 25, 2026):

good news is that there is a PR to fix it:

https://github.com/netbirdio/netbird/pull/5651

Just needs a maintainer to review and approve it

<!-- gh-comment-id:4129757247 --> @NoorChasib commented on GitHub (Mar 25, 2026): good news is that there is a PR to fix it: https://github.com/netbirdio/netbird/pull/5651 Just needs a maintainer to review and approve it
Sign in to join this conversation.
No Label triage-needed
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#11572