pollen crashes in containers
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
pollen (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Focal |
New
|
Undecided
|
Unassigned | ||
Jammy |
New
|
Undecided
|
Unassigned |
Bug Description
In jammy or focal containers I found pollen to be crashing very very early.
Some actions to debug early
root@j:~# pollen
Segmentation fault
In gdb you only get:
"During startup program terminated with signal SIGSEGV, Segmentation fault."
Acting on some "get early issues" gives me this:
(gdb) catch throw
Catchpoint 1 (throw)
(gdb) starti
Starting program: /usr/bin/pollen
During startup program terminated with signal SIGSEGV, Segmentation fault.
Still not enough, catch the entry point:
(gdb) info files
Symbols from "/usr/bin/pollen".
Local exec file:
`/usr/bin/pollen', file type elf64-x86-64.
Entry point: 0x46c9c0
0x0000000000401000 - 0x000000000065bb33 is .text
0x000000000065bb40 - 0x000000000065bd60 is .plt
0x000000000065c000 - 0x0000000000733103 is .rodata
0x0000000000733a80 - 0x0000000000733e10 is .dynsym
0x0000000000733108 - 0x0000000000733120 is .rela
0x0000000000733120 - 0x0000000000733438 is .rela.plt
0x0000000000733440 - 0x000000000073348c is .gnu.version
0x00000000007334a0 - 0x0000000000733520 is .gnu.version_r
0x0000000000733520 - 0x00000000007335dc is .hash
0x0000000000733820 - 0x0000000000733a71 is .dynstr
0x0000000000733e20 - 0x000000000073550c is .typelink
0x0000000000735510 - 0x0000000000735d58 is .itablink
0x0000000000735d58 - 0x0000000000735d58 is .gosymtab
0x0000000000735d60 - 0x000000000085f25e is .gopclntab
0x0000000000860000 - 0x0000000000860020 is .go.buildinfo
0x0000000000860020 - 0x0000000000860140 is .got.plt
0x0000000000860140 - 0x0000000000860270 is .dynamic
0x0000000000860270 - 0x0000000000860278 is .got
0x0000000000860280 - 0x00000000008968a0 is .noptrdata
0x00000000008968a0 - 0x00000000008a20b0 is .data
0x00000000008a20c0 - 0x00000000008d3a90 is .bss
0x00000000008d3aa0 - 0x00000000008d7648 is .noptrbss
0x0000000000000000 - 0x0000000000000008 is .tbss
0x0000000000400fe4 - 0x0000000000401000 is .interp
0x0000000000400f80 - 0x0000000000400fe4 is .note.go.buildid
(gdb) break *0x46c9c0
Breakpoint 3 at 0x46c9c0: file /usr/lib/
(gdb) r
Starting program: /usr/bin/pollen
During startup program terminated with signal SIGSEGV, Segmentation fault.
Really ?!?, debug loading ...
(gdb) export LD_DEBUG=all
Undefined command: "export". Try "help".
(gdb) set environment LD_DEBUG=all
(gdb) r
Starting program: /usr/bin/pollen
21332: symbol=
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_
...
21332:
21332: calling init: /lib64/
21332:
21332:
21332: calling init: /lib/x86_
21332:
21332:
21332: initialize program: /bin/sh
21332:
21332: symbol=
21332: symbol=
21332: symbol=
21332: binding file /lib/x86_
21332:
21332: transferring control: /bin/sh
21332:
During startup program terminated with signal SIGSEGV, Segmentation fault.
I might miss the cause in that huge output, but I didn't see something there either.
Rebuilding it locally (just make and also via debuild) creates a binary that works.
Also it does work fine in a Jammy and Focal VM,
only in LXD containers I see this breakage.
Full LD debug
(gdb) export LD_DEBUG=all __vdso_ clock_gettime; lookup in file=linux- vdso.so. 1 [0] clock_gettime' [LINUX_2.6] __vdso_ gettimeofday; lookup in file=linux- vdso.so. 1 [0] gettimeofday' [LINUX_2.6] vdso.so. 1 [0] __vdso_ getcpu; lookup in file=linux- vdso.so. 1 [0] __vdso_ clock_getres; lookup in file=linux- vdso.so. 1 [0] clock_getres' [LINUX_2.6] etc/ld. so.cache x86_64- linux-gnu/ libc.so. 6 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] 64-linux- gnu/libc. so.6 [0] required by file /bin/sh [0] ld-linux- x86-64. so.2 [0] required by file /lib/x86_ 64-linux- gnu/libc. so.6 [0] ld-linux- x86-64. so.2 [0] required by file /lib/x86_ 64-linux- gnu/libc. so.6 [0] ld-linux- x86-64. so.2 [0] required by file /lib/x86_ 64-linux- gnu/libc. so.6 [0] 64-linux- gnu/libc. so.6 /lib64/ ld-linux- x86-64. so.2 linux-vdso. so.1 [0]
Undefined command: "export". Try "help".
(gdb) set environment LD_DEBUG=all
(gdb) r
Starting program: /usr/bin/pollen
21332: symbol=
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_
21332: symbol=
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_
21332: symbol=__vdso_time; lookup in file=linux-
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_time' [LINUX_2.6]
21332: symbol=
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_getcpu' [LINUX_2.6]
21332: symbol=
21332: binding file linux-vdso.so.1 [0] to linux-vdso.so.1 [0]: normal symbol `__vdso_
21332:
21332: file=libc.so.6 [0]; needed by /bin/sh [0]
21332: find library=libc.so.6 [0]; searching
21332: search cache=/
21332: trying file=/lib/
21332:
21332: file=libc.so.6 [0]; generating link map
21332: dynamic: 0x00007ffff7fa1bc0 base: 0x00007ffff7d89000 size: 0x0000000000227e50
21332: entry: 0x00007ffff7db2f50 phdr: 0x00007ffff7d89040 phnum: 14
21332:
21332: checking for version `GLIBC_2.3' in file /lib/x86_
21332: checking for version `GLIBC_2.11' in file /lib/x86_
21332: checking for version `GLIBC_2.3.4' in file /lib/x86_
21332: checking for version `GLIBC_2.14' in file /lib/x86_
21332: checking for version `GLIBC_2.33' in file /lib/x86_
21332: checking for version `GLIBC_2.4' in file /lib/x86_
21332: checking for version `GLIBC_2.34' in file /lib/x86_
21332: checking for version `GLIBC_2.2.5' in file /lib/x86_
21332: checking for version `GLIBC_2.2.5' in file /lib64/
21332: checking for version `GLIBC_2.3' in file /lib64/
21332: checking for version `GLIBC_PRIVATE' in file /lib64/
21332:
21332: Initial object scopes
21332: object=/bin/sh [0]
21332: scope 0: /bin/sh /lib/x86_
21332:
21332: object=
21332: scope 0...