linux在启用模块后,系统报错:

在插入模块时提示缺少这些内容,应该如何配置?[12605.961141] mac80211_hwsim: Unknown symbol __ubsan_handle_type_mismatch (err -2)
[12605.961872] mac80211_hwsim: Unknown symbol __ubsan_handle_add_overflow (err -2)
[12605.962746] mac80211_hwsim: Unknown symbol __ubsan_handle_out_of_bounds (err -2)
[12605.963430] mac80211_hwsim: Unknown symbol __ubsan_handle_negate_overflow (err -2)
[12605.964294] mac80211_hwsim: Unknown symbol __ubsan_handle_divrem_overflow (err -2)
[12605.965143] mac80211_hwsim: Unknown symbol __ubsan_handle_builtin_unreachable (err -2)
[12605.965909] mac80211_hwsim: Unknown symbol __ubsan_handle_sub_overflow (err -2)
[12605.966696] mac80211_hwsim: Unknown symbol __ubsan_handle_load_invalid_value (err -2)
[12605.967454] mac80211_hwsim: Unknown symbol alloc_pages_current (err -2)
[12741.828124] mac80211_hwsim: Unknown symbol __ubsan_handle_type_mismatch (err -2)
[12741.828870] mac80211_hwsim: Unknown symbol __ubsan_handle_add_overflow (err -2)
[12741.829758] mac80211_hwsim: Unknown symbol __ubsan_handle_out_of_bounds (err -2)
[12741.830443] mac80211_hwsim: Unknown symbol __ubsan_handle_negate_overflow (err -2)
[12741.831281] mac80211_hwsim: Unknown symbol __ubsan_handle_divrem_overflow (err -2)
[12741.832111] mac80211_hwsim: Unknown symbol __ubsan_handle_builtin_unreachable (err -2)
[12741.832867] mac80211_hwsim: Unknown symbol __ubsan_handle_sub_overflow (err -2)
[12741.833665] mac80211_hwsim: Unknown symbol __ubsan_handle_load_invalid_value (err -2)
[12741.834429] mac80211_hwsim: Unknown symbol alloc_pages_current (err -2)
[12780.972995] rtlwifi: Unknown symbol __ubsan_handle_type_mismatch (err -2)
[12780.973752] rtlwifi: Unknown symbol __ubsan_handle_add_overflow (err -2)
[12780.974413] rtlwifi: Unknown symbol __ubsan_handle_out_of_bounds (err -2)
[12780.975123] rtlwifi: Unknown symbol __ubsan_handle_mul_overflow (err -2)
[12780.975846] rtlwifi: Unknown symbol __ubsan_handle_divrem_overflow (err -2)
[12780.976504] rtlwifi: Unknown symbol __ubsan_handle_sub_overflow (err -2)
[12780.977233] rtlwifi: Unknown symbol __ubsan_handle_load_invalid_value (err -2)
[12807.325217] rtlwifi: Unknown symbol __ubsan_handle_type_mismatch (err -2)
[12807.325893] rtlwifi: Unknown symbol __ubsan_handle_add_overflow (err -2)
[12807.326552] rtlwifi: Unknown symbol __ubsan_handle_out_of_bounds (err -2)
[12807.327252] rtlwifi: Unknown symbol __ubsan_handle_mul_overflow (err -2)
[12807.327944] rtlwifi: Unknown symbol __ubsan_handle_divrem_overflow (err -2)
[12807.328673] rtlwifi: Unknown symbol __ubsan_handle_sub_overflow (err -2)
[12807.329325] rtlwifi: Unknown symbol __ubsan_handle_load_invalid_value (err -2)
[13139.743063] rtl8xxxu: Unknown symbol __ubsan_handle_type_mismatch (err -2)
[13139.743772] rtl8xxxu: Unknown symbol __ubsan_handle_add_overflow (err -2)
[13139.744457] rtl8xxxu: Unknown symbol __ubsan_handle_out_of_bounds (err -2)
[13139.745145] rtl8xxxu: Unknown symbol __ubsan_handle_mul_overflow (err -2)
[13139.745831] rtl8xxxu: Unknown symbol __ubsan_handle_divrem_overflow (err -2)
[13139.746496] rtl8xxxu: Unknown symbol __ubsan_handle_shift_out_of_bounds (err -2)
[13139.747242] rtl8xxxu: Unknown symbol __ubsan_handle_sub_overflow (err -2)
[13139.747928] rtl8xxxu: Unknown symbol __ubsan_handle_load_invalid_value (err -2)

 

解决办法是在编译驱动时,编辑源码的.config文件。找到以下配置项并将其禁用(将 ym 改为 n):
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=n
CONFIG_UBSAN=n
CONFIG_UBSAN_SANITIZE_ALL=n

UBSAN(Undefined Behavior Sanitizer)的用途

UBSAN 是一种动态未定义行为检查工具,用于检测程序中可能导致不稳定或不可预知结果的未定义行为。它通过编译时插桩(instrumentation)来捕获这些行为,编译器会在可能导致未定义行为的操作前插入检测代码。如果检测到未定义行为,UBSAN 会调用特定的处理函数(如 __ubsan_handle_*),并打印错误信息

UBSAN 的主要功能和用途

  1. 检测未定义行为:
    • 检测数组下标越界
    • 检测有符号整数溢出
    • 检测空指针或未对齐指针的引用
    • 检测浮点数转换溢出
    • 检测非法的位移操作
  2. 编译时插桩:
    • 使用编译器选项(如 -fsanitize=undefined)在编译时插入检测代码
    • 可以选择性地启用或禁用某些检查
  3. 运行时错误报告:
    • 在运行时捕获未定义行为并打印详细的错误报告
    • 可以通过环境变量(如 UBSAN_OPTIONS)配置错误报告的行为
  4. 问题抑制:
    • 可以通过特定的属性(如 __attribute__((no_sanitize("undefined"))))禁用某些函数的检查
    • 可以使用运行时抑制文件来忽略某些已知的未定义行为
  5. 最小运行时模式:
    • 提供一个适合生产环境的最小运行时,以减少运行时开销