This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] WL1835MOD:WiLink R8.8随附的4.19内核补丁导致的内核分段故障

Guru**** 2391415 points
Other Parts Discussed in Thread: WL1835MOD

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1130856/wl1835mod-kernel-segmentation-fault-due-to-4-19-kernel-patches-provided-with-wilink-r8-8

器件型号:WL1835MOD

(一年前)我们被告知要升级到4.19内核、并在  4.19内核堆栈的基础上使用 R8.8 WiLink 补丁。

这包括 mac80211堆栈补丁、其中一个补丁会在 MAC 为不在对等/站列表中的 MAC 请求删除 peerlink/station 时引入导致分段故障的错误(请参阅下面的示例)。

易于重现、例如:
> iw phy phy1接口添加 wlan0 type MP
ifconfig wlan0 up
iw dev wlan0 mesh 加入 testmesh
iw dev wlan0 station del
(笑声) 但实际上、在由 TI WiLink R8.8 WPA 请求程序版本管理的网状网络中、我们经常遇到此问题。

查看 补丁014的代码 、该错误很明显、 在第31行 、您正在取消引用、而不进行 NULL 指针检查;
但是,如果被要求删除的电台不再连接,它实际上是 NULL。

让我想知道你们是否远程验证了此解决方案?

此补丁引起的分段故障的内核日志转储示例:

[  112.739850] Unable to handle kernel NULL pointer dereference at virtual address 00000078
[  112.748057] pgd = d28b11e7
[  112.750777] [00000078] *pgd=8e193831
[  112.754426] Internal error: Oops: 17 [#1] SMP ARM
[  112.759145] Modules linked in: wl18xx wlcore wlcore_sdio tlv320adc3100_i2c(O) tlv320adc3100(O) frontend_audio(O)
[  112.769354] CPU: 1 PID: 728 Comm: iw Tainted: G           O      4.19.112 #1
[  112.776406] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[  112.782959] PC is at sta_info_destroy_addr_bss+0x58/0xb4
[  112.788279] LR is at sta_info_get_bss+0x18/0x74
[  112.792814] pc : [<8089f048>]    lr : [<8089cd3c>]    psr: 60070013
[  112.799085] sp : d9091c08  ip : ebf83a22  fp : d9091c24
[  112.804316] r10: 00000000  r9 : 80e48f00  r8 : d8a7f900
[  112.809547] r7 : 80e05d48  r6 : d8db0220  r5 : 00000464  r4 : d88dc540
[  112.816078] r3 : 00000007  r2 : a57b0255  r1 : 00000001  r0 : 00000000
[  112.822611] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[  112.829749] Control: 10c5387d  Table: 690bc04a  DAC: 00000051
[  112.835501] Process iw (pid: 728, stack limit = 0xee5e00e8)
[  112.841079] Stack: (0xd9091c08 to 0xd9092000)
[  112.845447] 1c00:                   d8db0220 80bea7cc d8db0214 80e05d48 d9091c3c d9091c28
[  112.853634] 1c20: 808b52ec 8089effc 80e05d48 80bea7cc d9091c64 d9091c40 80872544 808b52d8
[  112.861819] 1c40: 80aa1934 d8db0220 0002000c a3423682 80bea7cc 80aa1934 d9091cf4 d9091c68
[  112.870003] 1c60: 807ae5f8 80872478 80aa0a84 d9091cfc d9091ca8 80e05d48 d808d000 d9091cfc
[  112.878188] 1c80: 00000000 d9091c84 d9091c84 a3423682 630f5dd4 d6b42908 0000032c 630f5dd5
[  112.886373] 1ca0: f24002d8 d8db0200 d8db0210 d8db0214 d808d000 80e48f00 d8da8000 d88dc000
[  112.894558] 1cc0: d9091cfc a3423682 d9091cfc d8a7f900 80e05d48 807ae2c8 d8db0200 00000028
[  112.902742] 1ce0: 00000000 80e05d48 d9091d44 d9091cf8 807ad590 807ae2d4 802625a4 00000000
[  112.910926] 1d00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 a3423682
[  112.919111] 1d20: 00000028 80e4a77c d8a7f900 d8a7f900 80e07a4c d9091d68 d9091d5c d9091d48
[  112.927296] 1d40: 807ae2b8 807ad4dc d8233c00 d8acb400 d9091d9c d9091d60 807acd0c 807ae298
[  112.935481] 1d60: 80440a50 00000028 7fffffff a3423682 00000001 d9091f44 80e05d48 d8acb400
[  112.943666] 1d80: d8a7f900 006000c0 00000028 00000000 d9091dfc d9091da0 807ad1d4 807acb34
[  112.951850] 1da0: 00000000 d9091e18 00000051 00000000 00000008 00000000 d8d41300 00000000
[  112.960035] 1dc0: 000002d8 00000000 00000000 a3423682 7ee07b98 d9091f44 80e05d48 00000000
[  112.968220] 1de0: 00000000 d6b06000 00000000 00000000 d9091e0c d9091e00 807462f8 807ace7c
[  112.976405] 1e00: d9091f2c d9091e10 807468b0 807462e8 80a98e40 d9091edc 00000000 01eee408
[  112.984590] 1e20: 00000028 80234dd0 d6b061e0 fffff000 d9091e54 d9091e40 80265518 80745e84
[  112.992774] 1e40: d6b061e0 fffff000 d9091e74 d9091e58 80265668 802654e4 d800fc00 00000010
[  113.000959] 1e60: 00000000 00000000 d9091e94 d9091e78 80265ac0 80265540 d6b42a18 d6b061e0
[  113.009143] 1e80: d6b42a18 00000000 00000000 00000000 d9091eb4 d9091ea0 8090ad2c 8019002c
[  113.017330] 1ea0: d6b42a18 00000000 d9091ed4 d9091eb8 80261588 8090ad0c d6b42a18 00000000
[  113.025514] 1ec0: d6b061e0 00080060 d9091ef4 d9091ed8 d9091f0c d9091ee0 8018ecf8 80191b98
[  113.033699] 1ee0: 00080040 00080060 d8d43180 00000000 d6b061e0 d8006910 d9091f14 a3423682
[  113.041885] 1f00: 8026827c 80e05d48 7ee07b6c 00000000 d6b06000 80101204 d9090000 00000128
[  113.050071] 1f20: d9091f94 d9091f30 80747948 80746684 00000000 00000000 00000000 00000000
[  113.058255] 1f40: fffffff7 d9091e5c 0000000c 00000001 00000000 00000000 d9091e24 00000000
[  113.066440] 1f60: 8014c434 00000000 00000000 00000000 00000000 a3423682 01eee330 01ef35b0
[  113.074624] 1f80: 01ef3668 00000128 d9091fa4 d9091f98 80747998 807478fc 00000000 d9091fa8
[  113.082808] 1fa0: 80101000 80747990 01eee330 01ef35b0 00000003 7ee07b6c 00000000 00000000
[  113.090993] 1fc0: 01eee330 01ef35b0 01ef3668 00000128 76f1d000 01ef3668 01ef35b0 00000001
[  113.099181] 1fe0: 76f1d0c8 7ee07b10 76f031d4 76e865fc 60070010 00000003 00000000 00000000
[  113.107358] Backtrace:
[  113.109830] [<8089eff0>] (sta_info_destroy_addr_bss) from [<808b52ec>] (ieee80211_del_station+0x20/0x30)
[  113.119318]  r7:80e05d48 r6:d8db0214 r5:80bea7cc r4:d8db0220
[  113.124997] [<808b52cc>] (ieee80211_del_station) from [<80872544>] (nl80211_del_station+0xd8/0x124)
[  113.134047]  r5:80bea7cc r4:80e05d48
[  113.137641] [<8087246c>] (nl80211_del_station) from [<807ae5f8>] (genl_rcv_msg+0x330/0x428)
[  113.145995]  r4:80aa1934
[  113.148540] [<807ae2c8>] (genl_rcv_msg) from [<807ad590>] (netlink_rcv_skb+0xc0/0x118)
[  113.156466]  r10:80e05d48 r9:00000000 r8:00000028 r7:d8db0200 r6:807ae2c8 r5:80e05d48
[  113.164298]  r4:d8a7f900
[  113.166841] [<807ad4d0>] (netlink_rcv_skb) from [<807ae2b8>] (genl_rcv+0x2c/0x3c)
[  113.174332]  r8:d9091d68 r7:80e07a4c r6:d8a7f900 r5:d8a7f900 r4:80e4a77c
[  113.181044] [<807ae28c>] (genl_rcv) from [<807acd0c>] (netlink_unicast+0x1e4/0x280)
[  113.188704]  r5:d8acb400 r4:d8233c00
[  113.192293] [<807acb28>] (netlink_unicast) from [<807ad1d4>] (netlink_sendmsg+0x364/0x3a8)
[  113.200565]  r10:00000000 r9:00000028 r8:006000c0 r7:d8a7f900 r6:d8acb400 r5:80e05d48
[  113.208398]  r4:d9091f44
[  113.210945] [<807ace70>] (netlink_sendmsg) from [<807462f8>] (sock_sendmsg+0x1c/0x2c)
[  113.218782]  r10:00000000 r9:00000000 r8:d6b06000 r7:00000000 r6:00000000 r5:80e05d48
[  113.226614]  r4:d9091f44
[  113.229157] [<807462dc>] (sock_sendmsg) from [<807468b0>] (___sys_sendmsg+0x238/0x24c)
[  113.237086] [<80746678>] (___sys_sendmsg) from [<80747948>] (__sys_sendmsg+0x58/0x94)
[  113.244926]  r10:00000128 r9:d9090000 r8:80101204 r7:d6b06000 r6:00000000 r5:7ee07b6c
[  113.252757]  r4:80e05d48
[  113.255300] [<807478f0>] (__sys_sendmsg) from [<80747998>] (sys_sendmsg+0x14/0x18)
[  113.262875]  r7:00000128 r6:01ef3668 r5:01ef35b0 r4:01eee330
[  113.268547] [<80747984>] (sys_sendmsg) from [<80101000>] (ret_fast_syscall+0x0/0x54)
[  113.276293] Exception stack(0xd9091fa8 to 0xd9091ff0)
[  113.281351] 1fa0:                   01eee330 01ef35b0 00000003 7ee07b6c 00000000 00000000
[  113.289537] 1fc0: 01eee330 01ef35b0 01ef3668 00000128 76f1d000 01ef3668 01ef35b0 00000001
[  113.297720] 1fe0: 76f1d0c8 7ee07b10 76f031d4 76e865fc
[  113.302781] Code: e0800005 eb01b2a3 e1a00006 e89da8f0 (e5903078)
[  113.308983] ---[ end trace fedeffbbd4a639b8 ]---
Segmentation fault

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您分享。 我们将查看该补丁。 您似乎可以通过在引用的修补程序中集成 NULL 指针检查来解决此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ‘我们确实知道如何自行“修补”此特定问题,我担心这不是我们所寻找的答案。

    如果上述问题很容易被识别为主要的质量问题、我们就会叠加证据、证明我们更难与 WiLink 解决方案的质量或至少基于 wl1835mod 的版本沟通问题:来自某些网状用例中的库存 WiLink WPA 请求程序的普通崩溃; …物理层上的‘re覆盖’过程(本身有点可疑)实际上并不能保证上层透明的临界情况;特定临界情况下的 MRC 等无线电 DSP 功能问题,

    除了这些实际事件之外; 仔细查看 wlcore 驱动程序的代码库和 TI WiLink 版本的 WPA 请求程序,我担心即使没有列出特定问题,我们的合格工程师也可以观察到,在实施足够的质量控制或可追溯性程序的情况下,设计和实施似乎都没有发生。 作为基于上述的一个简单示例:开发 mac80211的符合 nl80211的物理层驱动程序(使用 mac80211接口的补丁)似乎非常明显、其中包括对这些 nl80211接口的单元测试; 但是、上述问题以及我们可以重现的其他几个临界情况表明、实际情况从未发生过。 对请求代码库也提出了类似的问题。 我们对固件解决方案没有深入了解、但驾驶员侧的恢复过程需要引起类似的问题。

    到目前为止,我们已经设法解决这些问题,以获得规模相对较小的解决方案;由于业务原因,我无法讨论,我们现在面临着扩展这一解决方案的挑战; 如果没有对 WiLink 堆栈进行额外和更有效的质量控制、这显然是不可能的。

    现在,我意识到这是很多批评;但事实是,我正在寻找一个建设性的沟通渠道;为我们身边的人提供必要的信息和支持,以控制此解决方案的质量。

    如果我认为此论坛不是正确的通信平台,因此我希望您能承诺为我们提供正确的通信渠道和透明度。

    我已经列出了一些我认为我们需要或希望我们团队能够完成所需工作的输入:



    •我们需要 wl1835mod 芯片组的 SDIO 接口规格、因此我们可以量化芯片组解决方案并对其进行单元测试、而不受 WiLink 无线堆栈的其余部分的影响。


    •我们需要一个 nl80211接口规范、用于作为 WiLink 堆栈一部分添加的附加接口+有关已更改接口的详细设计信息。


    •我们希望在您的请求者的 WiLink 版本中为 TI 特有的更改和权变措施提供详细的设计和动机。


    •您能否让我们深入了解您身边使用的测试和验证计划、以便我们能够完成测试并复制部分或全部内容、而无需重新验证已验证的内容?


    •我们需要深入了解已知问题的根本原因分析;这至少应包括有关芯片组端问题的根本原因的详细信息、该问题可在 wlcore 内核驱动程序中激励恢复权变措施。 我们可以看到、在执行某些与 peerlink/station-description 相关的命令从 mac80211卸载到芯片组后、芯片组可能会变得无响应;但我们想了解其根本原因:这是固件问题、如果是、为什么它决定解决它而不是解决它? 是否是硬件问题、如果是、请详细说明、以便我们可以评估我们一方是否可以避免这种问题。


    •在某些情况下、wl1835mod 芯片组固件的源代码是否有可能被共享、甚至是开源的;这将帮助我们更好地理解整个解决方案、并使引入或提出必要的质量控制切换变得容易得多。

    此致、
    WIM Decelle