Hi,
I have an application that uses shm_open and it runs properly in a regular docker container. When I try and run it with gVisor, I get a function not implemented error.
Can anybody tell me if this is expected or should this work? I've setup a simple program that just tries to open a simple shared memory object for debugging this.
Some details:
docker --version
Docker version 18.06.1-ce, build e68fc7a
uname -a
Linux aburns-Precision-T7600 4.15.0-134-generic #138-Ubuntu SMP Fri Jan 15 10:52:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
runsc --version
runsc version release-20210125.0
spec: 1.0.1-dev
an strace from a regular docker container:
lum@bd5415fdd22f:/home/aburns$ strace ./a.out
execve("./a.out", ["./a.out"], 0x7ffe87995830 /* 12 vars */) = 0
brk(NULL) = 0x55e6292e8000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=24286, ...}) = 0
mmap(NULL, 24286, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f08a4273000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\"\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31680, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f08a4271000
mmap(NULL, 2128864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f08a3e48000
mprotect(0x7f08a3e4f000, 2093056, PROT_NONE) = 0
mmap(0x7f08a404e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f08a404e000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\35\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030928, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f08a3a57000
mprotect(0x7f08a3c3e000, 2097152, PROT_NONE) = 0
mmap(0x7f08a3e3e000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f08a3e3e000
mmap(0x7f08a3e44000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f08a3e44000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0
mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f08a3838000
mprotect(0x7f08a3852000, 2093056, PROT_NONE) = 0
mmap(0x7f08a3a51000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f08a3a51000
mmap(0x7f08a3a53000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f08a3a53000
close(3) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f08a426e000
arch_prctl(ARCH_SET_FS, 0x7f08a426e740) = 0
mprotect(0x7f08a3e3e000, 16384, PROT_READ) = 0
mprotect(0x7f08a3a51000, 4096, PROT_READ) = 0
mprotect(0x7f08a404e000, 4096, PROT_READ) = 0
mprotect(0x55e6291dc000, 4096, PROT_READ) = 0
mprotect(0x7f08a4279000, 4096, PROT_READ) = 0
munmap(0x7f08a4273000, 24286) = 0
set_tid_address(0x7f08a426ea10) = 19
set_robust_list(0x7f08a426ea20, 24) = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7f08a383dcb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f08a384a980}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f08a383dd50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f08a384a980}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/dev/shm/", {f_type=TMPFS_MAGIC, f_bsize=4096, f_blocks=16384, f_bfree=16384, f_bavail=16384, f_files=4111579, f_ffree=4111578, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_NOSUID|ST_NODEV|ST_NOEXEC|ST_RELATIME}) = 0
futex(0x7f08a3a56370, FUTEX_WAKE_PRIVATE,
2147483647) = 0
openat(AT_FDCWD, "/dev/shm/shmtest", O_RDWR|O_CREAT|O_NOFOLLOW|O_CLOEXEC, 0660) = 3
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
brk(NULL) = 0x55e6292e8000
brk(0x55e629309000) = 0x55e629309000
write(1, "shared memory name:/shmtest", 27shared memory name:/shmtest) = 27
exit_group(0) = ?
+++ exited with 0 +++
a strace from a gVisor based container:
lum@b23db930e835:/home/aburns$ strace ./a.out
execve("./a.out", ["./a.out"], 0x7fe5203c8760 /* 12 vars */) = 0
brk(NULL) = 0x55c17f3a3000
uname({sysname="Linux", nodename="b23db930e835", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=24286, ...}) = 0
mmap(NULL, 24286, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa1f3758000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\"\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31680, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa1f3756000
mmap(NULL, 2128864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1f3000000
mprotect(0x7fa1f3007000, 2093056, PROT_NONE) = 0
mmap(0x7fa1f3206000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fa1f3206000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\35\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030928, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1f2c00000
mprotect(0x7fa1f2de7000, 2097152, PROT_NONE) = 0
mmap(0x7fa1f2fe7000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fa1f2fe7000
mmap(0x7fa1f2fed000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa1f2fed000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0
mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa1f2800000
mprotect(0x7fa1f281a000, 2093056, PROT_NONE) = 0
mmap(0x7fa1f2a19000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7fa1f2a19000
mmap(0x7fa1f2a1b000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa1f2a1b000
close(3) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa1f3753000
arch_prctl(ARCH_SET_FS, 0x7fa1f3753740) = 0
mprotect(0x7fa1f2fe7000, 16384, PROT_READ) = 0
mprotect(0x7fa1f2a19000, 4096, PROT_READ) = 0
mprotect(0x7fa1f3206000, 4096, PROT_READ) = 0
mprotect(0x55c17f3a1000, 4096, PROT_READ) = 0
mprotect(0x7fa1f3629000, 4096, PROT_READ) = 0
munmap(0x7fa1f3758000, 24286) = 0
set_tid_address(0x7fa1f3753a10) = 19
set_robust_list(0x7fa1f3753a20, 24) = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fa1f2805cb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fa1f2812980}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7fa1f2805d50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fa1f2812980}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/dev/shm/", {f_type=OVERLAYFS_SUPER_MAGIC, f_bsize=4096, f_blocks=2251799813685247, f_bfree=2251799813685247, f_bavail=2251799813685247, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096}) = 0
brk(NULL) = 0x55c17f3a3000
brk(0x55c17f3c4000) = 0x55c17f3c4000
openat(AT_FDCWD, "/proc/mounts", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "none / overlayfs rw 0 0\nnone /pr"..., 4096) = 244
read(3, "", 4096) = 0
close(3) = 0
futex(0x7fa1f2a1e370, FUTEX_WAKE_PRIVATE,
2147483647) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0, 0), ...}) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "Error:Function not implemented\n", 31Error:Function not implemented
) = 31
exit_group(0) = ?
+++ exited with 0 +++
Does anyone have any thoughts?
Regards,
Aaron