首页 > 解决方案 > RHEL8 上的 glibc sscanf 分段错误,相同的代码适用于 RHEL 5、RHEL6 和 RHEL7

问题描述

我们有一个在 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 版本。

在此先感谢您的帮助。

标签: scanfglibccoredump

解决方案


所有参数都有正确的值

如果我们要相信你,你不应该在里面发生崩溃sscanf,但你会这样做。

如果我遇到这个问题,我会尝试两件事:

  1. 使用valgrind验证您的程序在其他地方没有堆损坏。
  2. 安装 libc debuginfo 包(说明),这样您就可以准确地看到程序崩溃__GI__IO_vfscanf的位置。

推荐阅读