【问题标题】:Can I use -fstack-check when compiling my Ubuntu 10.04 kernel module?编译 Ubuntu 10.04 内核模块时可以使用 -fstack-check 吗?
【发布时间】:2013-03-11 06:44:14
【问题描述】:

看起来我的内核模块在重负载下正在执行一些堆栈粉碎。我可以为内核模块使用 -fstack-check 编译选项吗?似乎该编译选项会导致编译器发出额外的代码,但不会链接到库或运行时。对吗?

我有一个非常简化的内核,它并没有做太多事情。我可以在启用和不启用 slub 调试的情况下加载那个简单的内核,并且它也会在编译时加载和不加载 -fstack-check。当我开始测试我的模块时,当我使用 -fstack-check 编译选项时它开始崩溃,而仅使用 slub 调试似乎不会引发错误。

另一个问题 (How does the gcc option -fstack-check exactly work?) 提供了一些信息,但我无法找到在内核模块编译中使用 -fstack-check 选项的人的示例。

【问题讨论】:

    标签: gcc linux-kernel stack stack-overflow ubuntu-10.04


    【解决方案1】:

    Linux 内核中的堆栈空间受到严重限制。仔细检查您的代码,检查在局部变量中没有使用过多的路径,alloca() 不允许。除此之外,内核环境很恶劣。仔细检查你的逻辑。为可能超出范围的数据添加测试,将数据跟踪到数据来源并确保它始终如您所愿。来自用户空间的数据总是是引起额外偏执的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多