This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我公司在 已启用增强容器隔离的企业环境中推出了 Docker 桌面。 我正在尝试使用 cl6x 工具链创建一个开发环境容器。 从 Ubuntu 23.10基本映像中、我成功安装了 CGT 7.4.24。 但是、当尝试运行编译器时、即使只是版本信息也会生成错误的系统调用。
cl6x --compiler_revision
无效的系统调用 cl6x --compiler_revision
此外、cl6x 在非企业容器中运行良好、因此我知道在某种程度上、一些安全限制阻止了它。 我的问题确实在于、cl6x 的哪些操作需要这些更具特权的系统调用? GCC 与我已经尝试的任何其他软件开发工具一样运行良好。 ECI 对开发人员的功能或性能影响应该很小、但 cl6x 不起作用。 如果您能提供任何见解、我们将不胜感激。 如果我能够确定导致问题的特定系统呼叫、或许我可以与 IT 安全团队合作以允许该呼叫、但如果不知道更多信息、我就无处可去。
我已尝试使用以下选项运行 Docker 容器、但未成功: docker run --security-opt seccomp=unconfined --cap-add=ALL
这是上述命令的一个字符串:
/# strace cl6x --compiler_revision
execve("/usr/local/bin/cl6x", ["cl6x", "--compiler_revision"], 0x7fffa9fd1358 /* 8 vars */) = 0
[ Process PID=257 runs in 32 bit mode. ]
uname({sysname="Linux", nodename="572b2f1a40d1", ...}) = 0
brk(NULL) = 0xa2a8000
brk(0xa2a8d40) = 0xa2a8d40
set_thread_area({entry_number=-1, base_addr=0xa2a8840, limit=0x0fffff, seg_32bit=1, contents=0, read_exec_only=0, limit_in_pages=1, seg_not_present=0, useable=1}) = 0 (entry_number=12)
readlink("/proc/self/exe", "/opt/c6000_7.4.24/bin/cl6x", 4096) = 26
brk(0xa2c9d40) = 0xa2c9d40
brk(0xa2ca000) = 0xa2ca000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
rt_sigaction(SIGINT, {sa_handler=0x8052690, sa_mask=[INT], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x8052690, sa_mask=[TERM], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=0x8052690, sa_mask=[HUP], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGILL, {sa_handler=0x8052690, sa_mask=[ILL], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGABRT, {sa_handler=0x8052690, sa_mask=[ABRT], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGFPE, {sa_handler=0x8052690, sa_mask=[FPE], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x8052690, sa_mask=[SEGV], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTRAP, {sa_handler=0x8052690, sa_mask=[TRAP], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x8052690, sa_mask=[BUS], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSYS, {sa_handler=0x8052690, sa_mask=[SYS], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXCPU, {sa_handler=0x8052690, sa_mask=[XCPU], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXFSZ, {sa_handler=0x8052690, sa_mask=[XFSZ], sa_flags=SA_RESTART}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7fe3000
write(1, "7.4.24\n", 77.4.24
) = 7
exit_group(0) = ?
+++ exited with 0 +++
Version 8.3.12 works ever so slightly better actually outputting its version information before failing:
/opt/ti-cgt-c6000_8.3.12/bin/cl6x --compiler_revision
8.3.12
❯ /opt/ti-cgt-c6000_8.3.12/bin/cl6x -version
TMS320C6x C/C++ Compiler v8.3.12
Build Number 1WBIN-2LI-UASAR-TAR-C08D
[1] 552 invalid system call /opt/ti-cgt-c6000_8.3.12/bin/cl6x -version
我们不会在 Docker 下测试编译器。 不过,我对这些问题感到惊讶。
cl6x 做什么需要这些更具特权的系统调用?
它不依赖于任何特权系统调用。 它调用典型的 I/O 函数、例如 开 , fprintf 等。
通过更仔细地了解 绑带 输出...
write(1, "7.4.24\n", 77.4.24
) = 7
exit_group(0) = ?
[/报价]这是一个成功的调用 写入 。 我无法解释为什么没有出现该字符串。 我不明白为什么下一次系统调用是要 EXIT_GROUP 。 这两次调用之间一定出现了问题。
谢谢。此致、
-乔治
我的坏乔治,我附上了一个副本的 strace 从一台 PC 没有任何这些安全限制在 Docker 映像运行良好. 以下是失败的 Docker Desktop Enterprise 安全引导程序。
strace cl6x --compiler_revision
execve("/usr/local/bin/cl6x", ["cl6x", "--compiler_revision"], 0x7ffcbbfbea78 /* 19 vars */) = 0
[ Process PID=177 runs in 32 bit mode. ]
uname({sysname="", nodename="", ...}) = 122
+++ killed by SIGSYS +++
[1] 174 invalid system call strace cl6x --compiler_revision
我对这个问题没有完全的了解。 在电缆的导通和关断方式之间 cl6x 调用 不合格 以及如何实施 不合格 Docker 变体中的 Docker 会响应该调用。 请了解 cl6x 不调用 不合格 结果。 启动代码中的某个东西、 开 或类似的事情、 不合格 。 很遗憾、我们无法为您提供更好的解释。
谢谢。此致、
-乔治
只是为了跟进此问题。 这几乎可以肯定、因为它是一个32位模式应用。
vm86 |
内核 x86实模式虚拟机中。 也由门控 CAP_SYS_ADMIN 。 |
的输出 绑带 上面的情况表明、 cl6x 是一个32位应用程序。 对我来说、这可能是问题的一部分。 但我从来没有足够的信心说它。
谢谢。此致、
-乔治