RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7
Posted
技术标签:
【中文标题】RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7【英文标题】:glibc sscanf segmentation fault on RHEL8, same code is working on RHEL 5,RHEL6 and RHEL7 【发布时间】:2020-02-27 12:51:10 【问题描述】:我们有一个可以在 RHEL5、RHEL6 和 RHEL7 上正确运行的旧版 C 应用程序。 但是相同的应用程序在 RHEL 8 上崩溃了,调用堆栈指向 glibc 库函数 sscanf 中的崩溃。
下面是调用栈顶-
*#0 0x00007f437767696e in __GI__IO_vfscanf () from /lib64/libc.so.6
#1 0x00007f437768a991 in vsscanf () from /lib64/libc.so.6
#2 0x00007f4377684f48 in sscanf () from /lib64/libc.so.6*
传递给 sscanf 的所有参数都是有效的,具有正确的值,我们在 gdb 中确认。 相同的代码适用于旧 RHEL 版本。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:所有参数都有正确的值
如果我们相信你,你不应该在 sscanf
内部发生崩溃,但你会这样做。
如果我遇到这个问题,我会尝试两件事:
-
通过valgrind 验证您的程序在其他地方没有堆损坏。
安装 libc debuginfo 包 (instructions),这样您就可以准确地看到
__GI__IO_vfscanf
内的位置,您的程序崩溃了。
【讨论】:
以上是关于RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7的主要内容,如果未能解决你的问题,请参考以下文章
centos6安装docker-compose报错缺失GLIBC_2.14
Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题
Centos6.5升级glibc解决“libc.so.6: version GLIBC_2.14 not found”报错问题