2

我正在按照此处所述在我的系统上实施临时补丁(非持久性)(在等待官方发行版内核时):

https://bugzilla.redhat.com/show_bug.cgi?id=1384344#c13

我已经在写脚本上测试了一个脏副本,目的是在我的系统上测试这个 bug 的解决方案,但请注意,我遇到了一个语义错误,并且这个 bug 在我的系统上仍然处于活动状态:

SuperUser Shell ~/> # stap -g -p 4 fix.stp 
semantic error: while resolving probe point: identifier 'syscall' at fix.stp:5:7
        source: probe syscall.ptrace {  // includes compat ptrace as well
                      ^

semantic error: no match

Pass 2: analysis failed.  [man error::pass2]
SuperUser Shell ~/>

用颜色(如果那是你的事):

在此处输入图像描述

阅读这篇文章:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/errors.html

我看到一个简短的解释:

语义错误:探测点不匹配,同时解析探测点foo
由于各种原因,无法完全解析事件/处理函数 foo。当脚本包含事件 kernel.function("blah") 并且 blah 不存在时会发生此错误。在某些情况下,错误还可能意味着脚本包含无效的内核文件名或源代码行号。

问题:

  • 这实质上是在说明syscall无法识别内核函数,对吗?
  • 有没有人在 CentOS 7.x 上成功实施过这个临时修复?

谢谢你的帮助

PS:对不起,如果这看起来有点像脚本小子(我还不完全理解这个热修复)。

4

1 回答 1

3

是的,我已经在 CentOS 7 上成功实施了这个临时缓解措施。

如对该 bugzilla 条目的评论之一所述,您需要为内核安装 systemtap 和 debuginfo 才能使此缓解措施起作用。

给出的命令是:

yum install systemtap yum-utils
debuginfo-install kernel-$(uname -r)

根据您发布的内容,大概您已经拥有 systemtap,但您收到的错误表明您需要 debuginfo 包。上面的第二个命令应该安装正确的东西;您也可以从http://debuginfo.centos.org/手动获取 RPM (这就是我最终所做的)

顺便说一句,使用 systemtap 的这种缓解措施并不是真正的解决方案,它只是使概念证明程序之一失败。这是值得做的,但不能替代真正的修补内核。

我不明白为什么 Red Hat 和 CentOS 还没有推出打补丁的内核包,Ubuntu 和其他人几天前就已经推出了更新。什么是滞留?

于 2016-10-22T18:26:39.153 回答