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的主要内容,如果未能解决你的问题,请参考以下文章

nmcli管理网络 RHEL8和CentOS8怎么重启网络

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”报错问题

libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案

如何在centos68安装oracle 11g