Source:
https://github.com/mcandre/potatogresql/tree/a189aae36dae48befbec944e27e20b2c0fc0a47f
Trace:
$ make build
$ docker run --privileged --rm -it mcandre/potatogresql sh
sh-2.03# /postgres
su[6]: + /0 root-postgres
PAM_unix[6]: (su) session opened for user postgres by (uid=0)
/postgres: line 5: 6 Segmentation fault su postgres -c "/usr/lib/postgresql/bin/postgres -i -D $PGDATA -p template1"
strace:
# su postgres -c "strace -f /usr/lib/postgresql/bin/postgres -i -D $PGDATA -p template1"
su[13]: + /0 root-postgres
PAM_unix[13]: (su) session opened for user postgres by (uid=0)
execve("/usr/lib/postgresql/bin/postgres", ["/usr/lib/postgresql/bin/postgres", "-i", "-D", "/var/lib/postgres/data", "-p", "template1"], [/* 15 vars */]) = 0
brk(0) = 0x8210000
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2836, ...}) = 0
old_mmap(NULL, 2836, PROT_READ, MAP_PRIVATE, 3, 0) = 0xf7fe6000
close(3) = 0
open("/lib/libcrypt.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=20436, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340\16"..., 4096) = 4096
old_mmap(NULL, 183228, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7fb9000
mprotect(0xf7fbe000, 162748, PROT_NONE) = 0
old_mmap(0xf7fbe000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4000) = 0xf7fbe000
old_mmap(0xf7fbf000, 158652, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7fbf000
close(3) = 0
open("/lib/libnsl.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=76032, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0@\0\000"..., 4096) = 4096
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7fb8000
old_mmap(NULL, 88200, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7fa2000
mprotect(0xf7fb4000, 14472, PROT_NONE) = 0
old_mmap(0xf7fb4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x11000) = 0xf7fb4000
old_mmap(0xf7fb6000, 6280, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7fb6000
close(3) = 0
open("/lib/libdl.so.2", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=9452, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\330\34"..., 4096) = 4096
old_mmap(NULL, 12428, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7f9e000
mprotect(0xf7fa0000, 4236, PROT_NONE) = 0
old_mmap(0xf7fa0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1000) = 0xf7fa0000
close(3) = 0
open("/lib/libm.so.6", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=116336, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240F\0"..., 4096) = 4096
old_mmap(NULL, 117464, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7f81000
mprotect(0xf7f9d000, 2776, PROT_NONE) = 0
old_mmap(0xf7f9d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1b000) = 0xf7f9d000
close(3) = 0
open("/lib/libreadline.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=143336, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\237"..., 4096) = 4096
old_mmap(NULL, 147632, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7f5c000
mprotect(0xf7f7b000, 20656, PROT_NONE) = 0
old_mmap(0xf7f7b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1e000) = 0xf7f7b000
old_mmap(0xf7f80000, 176, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7f80000
close(3) = 0
open("/lib/libhistory.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=21044, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\25"..., 4096) = 4096
old_mmap(NULL, 23384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7f56000
mprotect(0xf7f5b000, 2904, PROT_NONE) = 0
old_mmap(0xf7f5b000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4000) = 0xf7f5b000
close(3) = 0
open("/lib/libncurses.so.5", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=233848, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\340"..., 4096) = 4096
old_mmap(NULL, 252364, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7f18000
mprotect(0xf7f4a000, 47564, PROT_NONE) = 0
old_mmap(0xf7f4a000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x31000) = 0xf7f4a000
old_mmap(0xf7f52000, 14796, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7f52000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=888064, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\244\213"..., 4096) = 4096
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7f17000
old_mmap(NULL, 902396, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xf7e3a000
mprotect(0xf7f0f000, 29948, PROT_NONE) = 0
old_mmap(0xf7f0f000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xd4000) = 0xf7f0f000
old_mmap(0xf7f13000, 13564, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7f13000
close(3) = 0
munmap(0xf7fe6000, 2836) = 0
getpid() = 14
brk(0) = 0x8210000
brk(0x8210038) = 0x8210038
brk(0x8211000) = 0x8211000
geteuid() = 31
open("/var/lib/postgres/data/pg_options", O_RDONLY) = -1 ENOENT (No such file or directory)
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
gdb:
# su postgres -c "gdb /usr/lib/postgresql/bin/postgres"
su[17]: + /0 root-postgres
PAM_unix[17]: (su) session opened for user postgres by (uid=0)
GNU gdb 19990928
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...(no debugging symbols found)...
(gdb) run -i -D $PGDATA -p template1
Starting program: /usr/lib/postgresql/bin/postgres -i -D $PGDATA -p template1
(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x80a4f06 in pq_flush ()
ldd:
# ldd /usr/lib/postgresql/bin/postgres
libcrypt.so.1 => /lib/libcrypt.so.1 (0xf7fb9000)
libnsl.so.1 => /lib/libnsl.so.1 (0xf7fa2000)
libdl.so.2 => /lib/libdl.so.2 (0xf7f9e000)
libm.so.6 => /lib/libm.so.6 (0xf7f81000)
libreadline.so.4 => /lib/libreadline.so.4 (0xf7f5c000)
libhistory.so.4 => /lib/libhistory.so.4 (0xf7f56000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7f18000)
libc.so.6 => /lib/libc.so.6 (0xf7e3a000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xf7fea000)
System:
- postgresql 6.5.3-27
- Debian 2.2 Potato
- Docker client 1.4.1
- Docker server 1.5.0
- boot2docker 1.4.1
- Vagrant 1.7.2
- VirtualBox 4.3.24
- Homebrew 0.9.5
- Mac OS X 10.10.3 Yosemite