【问题标题】:iopl() fails intermittentlyiopl() 间歇性失败
【发布时间】:2019-04-18 04:00:19
【问题描述】:

我正在开发一个硬件设备,我必须在其中执行一些 GPIO 操作。 在我的程序开始时,我调用iopl(3)。可执行文件不是 root 拥有的,但具有功能集 - cap_sys_rawio+eip。虽然这在大多数情况下都有效 有时该过程会失败:

iopl: Operation not permitted

能力不够?我无法以root 运行程序。 设备正在运行Ubuntu 14.04.2dmesg / syslogs 不给 任何提示!

更多细节:

我的main 开头是这样的:

if (iopl(3) != 0) {
    perror("iopl");
    assert(!"Failed to set privilege!");
}

虽然这在大多数情况下都有效,但有时在硬件平台上 (基于 Intel Atom),perror 打印 iopl: Operation not permitted 失败。

【问题讨论】:

  • 愿意提供重现问题的代码吗?另外,您正在运行什么架构?
  • 我的程序主要有:if (iopl(3) != 0) { perror("iopl"); }。我无法随意重现该问题! :( 它有时会发生,我不知道为什么 iopl 失败了。这是英特尔 Atom (Intel(R) Atom(TM) CPU C2558 @ 2.40GHz) CPU。如果您需要更多详细信息,请告诉我。
  • 将架构和代码添加到您的问题中,包括main() 和包含,以使问题更完整。还要考虑一下strace。捕获其输出并将错误情况与非错误情况进行比较。特别是在iopl()-call 之前是否有症状。除此之外,我也很茫然。
  • @UlrichEckhardt 当然,如果再次发生这种情况,strace 它会

标签: ubuntu-14.04 system-calls


【解决方案1】:

知道你不能以root身份运行程序,我猜你是否尝试过:

 chmod u+s /usr/bin/xinit

或者如果你有root访问权限,

sudo chmod u+s /usr/bin/xinit

如果没有设置 setuid(考虑在没有 sudo 的情况下运行——因为您已经拥有 root 访问权限)

sudo chown root $prefix/Xorg

sudo chmod u+s $prefix/Xorg

【讨论】:

  • 是的,可执行文件已经设置了功能,所以它不必以 root 身份运行
  • Xorg setuid 是 root 吗?
  • 我根本不使用 Xorg。这是我自己的应用程序,我正在为此做 setcap 而不是 suid root。
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多