Error on arm64 on Android (termux)
Hello, thank you for this amazing piece of software. It works well on PC, but fails to run on Termux with the following error:
SIGSYS: bad system call
PC=0x13a40 m=6 sigcode=1
goroutine 1 [syscall]:
syscall.Syscall(0x1bc, 0x0, 0x0, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/syscall/syscall_linux.go:69 +0x8 fp=0x18ac88c sp=0x18ac854 pc=0x9aca8
github.com/landlock-lsm/go-landlock/landlock/syscall.LandlockGetABIVersion()
/home/runner/go/pkg/mod/github.com/landlock-lsm/[email protected]/landlock/syscall/syscall_linux.go:26 +0x30 fp=0x18ac8b0 sp=0x18ac88c pc=0x108f10
github.com/landlock-lsm/go-landlock/landlock.getSupportedABIVersion()
/home/runner/go/pkg/mod/github.com/landlock-lsm/[email protected]/landlock/abi_versions.go:48 +0x20 fp=0x18ac8c0 sp=0x18ac8b0 pc=0x1090c0
github.com/landlock-lsm/go-landlock/landlock.restrict({0x1fff, 0x0, 0x1}, {0x18aca98, 0x1, 0x1})
/home/runner/go/pkg/mod/github.com/landlock-lsm/[email protected]/landlock/restrict.go:41 +0x11c fp=0x18ac9cc sp=0x18ac8c0 pc=0x10a930
github.com/landlock-lsm/go-landlock/landlock.Config.RestrictPaths(...)
/home/runner/go/pkg/mod/github.com/landlock-lsm/[email protected]/landlock/config.go:243
main.lock({0x48e50c, 0x4})
/home/runner/work/wireproxy/wireproxy/WireProxy/cmd/wireproxy/main.go:65 +0x140 fp=0x18aceb0 sp=0x18ac9cc pc=0x3d48a0
main.main()
/home/runner/work/wireproxy/wireproxy/WireProxy/cmd/wireproxy/main.go:150 +0x124 fp=0x18acfa0 sp=0x18aceb0 pc=0x3d5dc8
runtime.main()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:267 +0x338 fp=0x18acfec sp=0x18acfa0 pc=0x50f34
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x18acfec sp=0x18acfec pc=0x86548
goroutine 2 [force gc (idle)]:
runtime.gopark(0x4b2510, 0x7b7188, 0x11, 0x14, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x1842fd4 sp=0x1842fc0 pc=0x514cc
runtime.goparkunlock(...)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:404
runtime.forcegchelper()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:322 +0xe4 fp=0x1842fec sp=0x1842fd4 pc=0x51308
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x1842fec sp=0x1842fec pc=0x86548
created by runtime.init.5 in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:310 +0x1c
goroutine 17 [GC sweep wait]:
runtime.gopark(0x4b2510, 0x7b7578, 0xc, 0x14, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x183e7c4 sp=0x183e7b0 pc=0x514cc
runtime.goparkunlock(...)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:404
runtime.bgsweep(0x188c000)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgcsweep.go:280 +0xa8 fp=0x183e7e4 sp=0x183e7c4 pc=0x3a8e4
runtime.gcenable.func1()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgc.go:200 +0x28 fp=0x183e7ec sp=0x183e7e4 pc=0x2b204
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x183e7ec sp=0x183e7ec pc=0x86548
created by runtime.gcenable in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgc.go:200 +0x74
goroutine 18 [GC scavenge wait]:
runtime.gopark(0x4b2510, 0x7b78e8, 0xd, 0x14, 0x2)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x183efb4 sp=0x183efa0 pc=0x514cc
runtime.goparkunlock(...)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:404
runtime.(*scavengerState).park(0x7b78e8)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgcscavenge.go:425 +0x68 fp=0x183efc8 sp=0x183efb4 pc=0x37b48
runtime.bgscavenge(0x188c000)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgcscavenge.go:653 +0x3c fp=0x183efe4 sp=0x183efc8 pc=0x38268
runtime.gcenable.func2()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgc.go:201 +0x28 fp=0x183efec sp=0x183efe4 pc=0x2b1b0
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x183efec sp=0x183efec pc=0x86548
created by runtime.gcenable in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mgc.go:201 +0xbc
goroutine 19 [finalizer wait]:
runtime.gopark(0x4b23b4, 0x7c83d0, 0x10, 0x14, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x183f78c sp=0x183f778 pc=0x514cc
runtime.runfinq()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mfinal.go:193 +0x110 fp=0x183f7ec sp=0x183f78c pc=0x2a02c
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x183f7ec sp=0x183f7ec pc=0x86548
created by runtime.createfing in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/mfinal.go:163 +0x5c
goroutine 20 [select, locked to thread]:
runtime.gopark(0x4b2544, 0x0, 0x9, 0x18, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x18426fc sp=0x18426e8 pc=0x514cc
runtime.selectgo(0x18427d8, 0x18427d0, 0x0, 0x0, 0x2, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/select.go:327 +0xaf0 fp=0x1842798 sp=0x18426fc pc=0x6478c
runtime.ensureSigM.func1()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/signal_unix.go:1014 +0x1b8 fp=0x18427ec sp=0x1842798 pc=0x7de20
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x18427ec sp=0x18427ec pc=0x86548
created by runtime.ensureSigM in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/signal_unix.go:997 +0xf8
goroutine 21 [syscall]:
runtime.notetsleepg(0x7c8bc8, 0xffffffffffffffff)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/lock_futex.go:236 +0x24 fp=0x183ffc0 sp=0x183ffa8 pc=0x1b7bc
os/signal.signal_recv()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/sigqueue.go:152 +0x34 fp=0x183ffe0 sp=0x183ffc0 pc=0x83f38
os/signal.loop()
/opt/hostedtoolcache/go/1.21.9/x64/src/os/signal/signal_unix.go:23 +0x14 fp=0x183ffec sp=0x183ffe0 pc=0x28a560
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x183ffec sp=0x183ffec pc=0x86548
created by os/signal.Notify.func1.1 in goroutine 1
/opt/hostedtoolcache/go/1.21.9/x64/src/os/signal/signal.go:151 +0x28
goroutine 3 [chan receive]:
runtime.gopark(0x4b2394, 0x1892ef0, 0xe, 0x17, 0x2)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/proc.go:398 +0x104 fp=0x184378c sp=0x1843778 pc=0x514cc
runtime.chanrecv(0x1892ec0, 0x0, 0x1)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/chan.go:583 +0x4c4 fp=0x18437c8 sp=0x184378c pc=0x164b8
runtime.chanrecv1(0x1892ec0, 0x0)
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/chan.go:442 +0x20 fp=0x18437dc sp=0x18437c8 pc=0x15fc4
main.main.func1()
/home/runner/work/wireproxy/wireproxy/WireProxy/cmd/wireproxy/main.go:145 +0x2c fp=0x18437ec sp=0x18437dc pc=0x3d6b38
runtime.goexit()
/opt/hostedtoolcache/go/1.21.9/x64/src/runtime/asm_arm.s:859 +0x4 fp=0x18437ec sp=0x18437ec pc=0x86548
created by main.main in goroutine 1
/home/runner/work/wireproxy/wireproxy/WireProxy/cmd/wireproxy/main.go:144 +0xfc
trap 0x0
error 0x0
oldmask 0x0
r0 0x0
r1 0x0
r2 0x1
r3 0x0
r4 0x0
r5 0x0
r6 0x1802248
r7 0x1bc
r8 0x6
r9 0x3d0000
r10 0x1802200
fp 0x6
ip 0x1988003
sp 0x18ac828
lr 0x13a04
pc 0x13a40
cpsr 0x60000010
fault 0x0
However, version v1.0.5 seems to work without any problems UPD: v1.0.7 is the latest version, that runs without this error
Confirmed still an issue. I believe it has to do with https://github.com/whyvl/wireproxy/commit/a6797166eba8cfd77de54e8ede1051a9bf4baeee
Namely few if any Android kernels support Landlock so it causes a panic. I did do a test commenting out the landlock calls and version 1.0.8 does work as expected.
A solution may be to add a flag to selectively disable landlock in an unsupported environment (although this is sub-ideal).
https://github.com/termux/termux-packages/blob/master/packages/wireproxy/0001-drop-sandbox.patch