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.

[参考译文] CODECOMPOSER: CGT 7.4.24 Docker 容器坏系统调用

Guru**** 1963925 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1360295/codecomposer-cgt-7-4-24-docker-container-bad-system-call

器件型号:CODECOMPOSER

我公司在  已启用增强容器隔离的企业环境中推出了 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位模式应用。

    从 Seccomp 到默认配置文件阻止的重大系统呼叫

    vm86 内核 x86实模式虚拟机中。 也由门控 CAP_SYS_ADMIN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    的输出 绑带 上面的情况表明、 cl6x 是一个32位应用程序。  对我来说、这可能是问题的一部分。  但我从来没有足够的信心说它。

    谢谢。此致、

    -乔治

x 出现错误。请重试或与管理员联系。