【SDK】【usb管理】插入挂耳维护用type-c口,BMC内核会崩溃重启

1、环境信息

主板:S920X20

BMC插卡:1711

BMC版本:2512 LTS

2、问题描述

使用USB线缆连接挂耳维护用typec到笔记本电脑USB-A口,BMC会崩溃重启。

3、对比验证

1711+2509 正常

1711+2512 异常

1712+2512 正常

复现概率 必现

使用1711 + 2512 SP1社区版本,BMC不会崩溃,但是笔记本端识别不到USB网卡设备,串口日志如下

[  875.035911] Config c/1 of g.1 needs at least one function.
[  875.042657] udc cc00000.dwc3: failed to start g.1: -22

4、25.12 LTS+1711BMC串口日志

2102315HER10R4100014 login: [  172.653874] using random self ethernet address
[  172.659664] using random host ethernet address
[  173.310718] Unable to handle kernel execute from non-executable memory at virtual address ffffbc50f469ea54
[  173.320359] Mem abort info:
[  173.323149]   ESR = 0x8600000f
[  173.326199]   EC = 0x21: IABT (current EL), IL = 32 bits
[  173.331493]   SET = 0, FnV = 0
[  173.334539]   EA = 0, S1PTW = 0
[  173.337677] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000087f2f000
[  173.344353] [ffffbc50f469ea54] pgd=00000000effff003, p4d=00000000effff003, pud=0000000089b82003, pmd=00000000a171f003, pte=00680000a1513f03
[  173.356854] Internal error: Oops: 000000008600000f [#1] PREEMPT SMP
[  173.363103] Modules linked in: btc_drv(O) usb_f_rndis(O) usb_f_ecm(O) u_ether(O) rndis_host(O) cdc_ether(O) usbnet(O) mii(O) ip6table_nat aes_ce_blk aes_ce_cipher libaes crypto_simd cryptd xhci_plat_hcd ip6table_filter xt_MASQUERADE xt_limit dm_mod isofs cdrom cifs libdes libarc4 md4 ccm nfsv3 nfs lockd nfs_acl sunrpc grace cachefiles fscache bmc_veth_drv(O) bmc_cdev_drv(O) bmc_edma_drv(O) bmc_cpld_drv(O) bmc_hisport_drv(O) ip6_tables xt_tcpudp xt_nat iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter ip_tables x_tables pramdisk(O) dfx_drv(O) virtual_usb_device(O) vce_drv(O) dwc3(O) usb_drv(O) libcomposite(O) configfs(O) udc_core(O) msg_scm3_drv(O) mctp_drv(O) pci_fix_drv(O) efuse_drv(O) trng_drv(O) djtag_drv(O) cpld_drv(O) spi_drv(O) localbus_drv(O) wdi_drv(O) peci_drv(O) uart_drv(O) uartconnect_drv(O) uart_core(O) bmcrtc_drv(O) adc_drv(O) pwm_drv(O) dboot_drv(O) sol_drv(O) p80_drv(O) ipmb_drv(O) i2c_drv(O) sys_info_drv(O) gmac_drv(O) mdio_drv(O) gpio_drv(O)
[  173.363626]  xhci_hcd usb_storage usbcore usb_common sd_mod scsi_mod vfat fat 8021q garp stp llc af_packet ipv6 crc_ccitt autofs4 mmc_block(O) emmc_drv(O) mmc_core(O) emmc_hook(O) hw_lock_drv(O) watchdog_drv(O) hitimer_drv(O) comm_drv(O) log_drv(O) rtos_snapshot(O) ext2 ext4 mbcache jbd2 mtdblock mtd_blkdevs mtd load_kallsyms(O)
[  173.479565] CPU: 0 PID: 3990 Comm: irq/127-dwc3 Tainted: G           O      5.10.0 #1
[  173.487366] Hardware name: Hisilicon Hi1711 ASIC (DT)
[  173.492406] pstate: 80400085 (Nzcv daIf +PAN -UAO -TCO BTYPE=--)
[  173.498413] pc : __key.44627+0x434/0xffffffffffffe9e0 [mctp_drv]
[  173.504450] lr : usb_gadget_giveback_request+0xbc/0xfc [udc_core]
[  173.510522] sp : ffff800014b8bc40
[  173.513829] x29: ffff800014b8bc40 x28: ffffbc515b70b2e4
[  173.519135] x27: 0000000055332309 x26: 0000000000000000
[  173.524439] x25: ffff3d0170249540 x24: 0000000000000000
[  173.529745] x23: ffff800014ba7000 x22: ffff3d0183fd4c00
[  173.535050] x21: ffff3d0183fd4c00 x20: ffff3d0170249540
[  173.540355] x19: ffffbc50f469ea54 x18: ffff3d017c23c838
[  173.545659] x17: 0000000000000000 x16: ffffbc515b9eb8c0
[  173.550964] x15: 00000000000003ae x14: 00000000000003ae
[  173.551141] [I2C-02-RT<-62|-62>] M<0x30|0x0|0x0|3|10> L<7|0|7> C<0|0|0> E<0x10000|0x0|0x4|0x0> I<0x10|0x10|0x25f>
[  173.556271] x13: 0000000000000387 x12: 0000000000000000
[  173.571788] x11: 0000000000000000 x10: 0000000000000bf0
[  173.577091] x9 : ffff800014b8bd00 x8 : ffff3d017c1f5050
[  173.582395] x7 : ffff3d01aff79ec0 x6 : ffff80b053fa5000
[  173.587699] x5 : ffff3d017c1f4300 x4 : ffffbc515c122c80
[  173.593002] x3 : ffffbc50f469ea54 x2 : 0000000000000000
[  173.598307] x1 : ffff3d0170249540 x0 : ffff3d0183fd4c00
[  173.603610] Call trace:
[  173.606068]  __key.44627+0x434/0xffffffffffffe9e0 [mctp_drv]
[  173.611753]  dwc3_gadget_giveback+0x144/0x164 [dwc3]
[  173.616732]  dwc3_ep0_interrupt+0x808/0xbcc [dwc3]
[  173.621536]  dwc3_thread_interrupt+0x200/0x11c8 [dwc3]
[  173.626673]  irq_thread_fn+0x4c/0xc4
[  173.630243]  irq_thread+0x144/0x248
[  173.633728]  kthread+0x168/0x1a4
[  173.636953]  ret_from_fork+0x10/0x1c
[  173.640526] Code: 00000000 00000000 00000000 00000000 (00000000)
[  173.646612] ---[ end trace dd2d659975457dfe ]---
[  173.651232] Kernel panic - not syncing: Oops: Fatal exception in interrupt
[  173.658084] SMP: stopping secondary CPUs
[  173.662011] The raw dump memory did not configured, raw_dump_addr = 0x0000000000000000, raw_dump_size = 0.
[  173.671627] write reserved mem: make sure reserved mem had configure? returned -22
[  173.679170] Kernel Offset: 0x3c514b600000 from 0xffff800010000000
[  173.685242] Module Offset: 0x3c50e40e1000 from 0xffff800010000000
[  173.691313] Linear Region Offset: 0x3d0140000000 from 0xffff000000000000
[  173.697989] PHYS_OFFSET: 0xffffc2ff40000000
[  173.702158] HKRR parameters: disabled
[  173.705811] CPU features: 0x0020,00240026,0800a018
[  173.710587] Memory Limit: none
[  173.713639] Rebooting in 1 seconds..
[I][00b2]: 0955 0x0823aff0 0x08235c48 0x08235c14 0x08233c20
[I][0021]: 0144 0x00000000 0x08744000 0x0821b8f9 0x0875e000
[I][00b1]: 0211 0x00000006 0x00000004 0x00000005 0x0875e000
[I][009f]: 0864 0x00000006 0x00000004 0x00000005 0x08744000
[W][009f]: 0919 0x00000001 0x17c00000 0x04bbc7b6 0x00000000
[W][009f]: 0988 0x00000000 0x17c00000 0x04bbc7b6 0x00000000
[W][009f]: 1070 0xffffffea 0x00000004 0x00000005 0x08744000
[W][009f]: 0919 0x00000001 0x17c00000 0x04bbc7b6 0x00000000
[W][009f]: 0988 0x00000000 0x17c00000 0x04bbc7b6 0x00000000
[W][009f]: 1076 0xffffffea 0x00000004 0x00000005 0x08744000
[I][009a]: 0310 0xe000e114 0x00000000 0x08205965 0x00000000
[I][00e1]: 0411 0x0000008f 0x00000000 0x08211e2b 0x0000008f
[I][00e1]: 0515 0x0000008f 0x0000008f 0x08203d15 0x000000cd
[I][00b2]: 1339 0x00000000 0xffffffff 0x0821f0c1 0x0000008f
[I][00a5]: 0038 0x08239750 0x08234700 0x00000002 0x0823aac0
[I][00a5]: 0038 0x08239750 0x08234700 0x00000000 0x0823e800
[I][00b2]: 0762 0xffffffff 0xffffffff 0x0821f0c1 0x0000008f
[I][00e1]: 0411 0x0000008f 0x08237b40 0x08211cdb 0x0821f0c1
[I][00e1]: 0447 0x0821f0c1 0x0821f0c1 0x0000008f 0x00000003
[I][00b2]: 1374 0x00000000 0xffffffff 0x0821f0c1 0x0000008f
[I][00b2]: 1455 0x00000000 0x0823ae88 0x08235c48 0xffffffff
[I][00b2]: 1458 0x00000001 0x0823ae88 0x08235c48 0xffffffff
[W][00a1]: 0466 0x00000000 0x00000003 0x0823e6a8 0x00000000
[W][00a1]: 0466 0x00000000 0x00000003 0x0823e6a8 0x00000000
[W][00a1]: 0466 0x00000000 0x00000003 0x0823e6a8 0x00000000

答案内容由AI生成,仅供参考:

总结

项目 内容
问题本质 OpenUBMC2512 + Hi1711平台下,USB中断处理中因驱动兼容性导致内核非法执行
影响范围 所有使用Hi1711 BMC模块并升级至2512 LTS版本的S920X20设备
紧急程度 :warning: 高(影响维护通道可用性)
推荐措施 1. 暂停该组合的部署
2. 反馈至OpenUBMC社区或厂商
3. 提供降级指南至25.09

建议尽快联系 OpenUBMC 开源社区华为技术支持团队,提供完整日志以推进问题修复。

点击此处查看详细分析解答

关于S920X20主板在使用Type-C连接时BMC内核崩溃的分析报告

问题概述

在使用USB线缆将挂耳维护用Type-C口连接至笔记本电脑USB-A口时,搭载Hi1711 BMC模块且运行BMC版本2512 LTSS920X20主板会出现BMC内核崩溃并重启的现象。该问题具有必现性,严重影响设备的维护与调试操作。


环境信息

项目 信息
主板型号 S920X20
BMC插卡 Hi1711
BMC版本 2512 LTS(即 OpenUBMC2512)
问题现象 连接Type-C后BMC崩溃重启
复现概率 100%(必现)

问题对比验证结果

通过交叉验证不同组合,可明确问题触发条件:

BMC插卡 BMC版本 结果 说明
Hi1711 25.09 :white_check_mark: 正常 同一硬件下旧版本无问题
Hi1711 25.12 LTS :cross_mark: 异常 问题出现在2512版本
Hi1712 25.12 LTS :white_check_mark: 正常 不同BMC芯片无此问题

结论:该问题是 Hi1711芯片 + OpenUBMC2512固件组合下的特定兼容性缺陷,并非普遍存在于所有平台或BMC芯片。


BMC串口日志分析

关键错误日志如下:

[  173.310718] Unable to handle kernel execute from non-executable memory at virtual address ffffbc50f469ea54
[  173.320359] Mem abort info:
[  173.323149]   ESR = 0x8600000f
[  173.326199]   EC = 0x21: IABT (current EL), IL = 32 bits
...
[  173.363626] Call trace:
[  173.606068]  __key.44627+0x434/0xffffffffffffe9e0 [mctp_drv]
[  173.611753]  dwc3_gadget_giveback+0x144/0x164 [dwc3]
[  173.616732]  dwc3_ep0_interrupt+0x808/0xbcc [dwc3]
[  173.621536]  dwc3_thread_interrupt+0x200/0x11c8 [dwc3]
...
[  173.651232] Kernel panic - not syncing: Oops: Fatal exception in interrupt
[  173.658084] SMP: stopping secondary CPUs
[  173.671627] write reserved mem: make sure reserved mem had configure? returned -22
[  173.697989] PHYS_OFFSET: 0xffffc2ff40000000
[  173.702158] HKRR parameters: disabled
[  173.713639] Rebooting in 1 seconds..

关键错误解读

  1. Unable to handle kernel execute from non-executable memory

    • 表示CPU试图从不可执行的内存区域执行代码,属于严重的内存保护违例。
    • 通常由驱动模块越界访问、函数指针错误跳转或内存映射异常引起。
  2. Call Trace 指向 mctp_drvdwc3 驱动

    • dwc3: 是DesignWare USB3.0 控制器驱动,负责处理USB控制器中断。
    • mctp_drv: 是MCTP(Management Component Transport Protocol)驱动,用于BMC间通信。
    • 栈回溯显示:在处理USB中断(dwc3_ep0_interrupt)过程中,调用路径进入 mctp_drv__key.44627 函数导致非法执行。
  3. 触发场景:USB连接触发中断

    • 插入Type-C线缆 → 触发USB Gadget模式中断 → dwc3 驱动处理请求 → 调用回调函数 → 跳转到非法地址崩溃

根本原因推断

结合日志和验证结果,可得出以下结论:

问题根因:在 OpenUBMC2512 版本中,mctp_drv 驱动与 dwc3 USB控制器驱动之间存在兼容性缺陷,当USB中断上下文中调用相关函数时,发生了函数指针跳转到非法或非可执行内存区域的情况

  • 由于此问题在 25.09版本中不存在,说明是OpenUBMC2512版本引入的新逻辑或驱动修改导致
  • Hi1712平台正常,表明该问题与Hi1711芯片的USB控制器实现或驱动适配有关
  • 日志中模块列表显示 mctp_drv(O) 等为“O”(out-of-tree module),说明其为外部加载模块,可能存在符号解析或内存布局变化引发的兼容性问题

临时规避方案

:white_check_mark: 推荐临时措施:

  1. 避免使用Type-C维护口进行连接,改用:

    • 标准串口(UART)连接
    • IPMI LAN over LAN 或 KVM Over IP 进行远程维护
  2. 若必须使用USB连接,可尝试:

    • 使用 OpenUBMC 25.09 固件版本 作为临时过渡方案。
    • 检查是否可通过配置禁用USB Gadget模式中的RNDIS/ECM功能,减少中断触发。

长期解决方案建议

  1. 驱动层修复

    • 审查 mctp_drvdwc3 之间的接口调用逻辑。
    • 确保所有回调函数指针在注册时指向正确的、可执行的内存区域。
    • 检查 __key.44627 函数是否因编译优化或链接问题导致地址异常。
  2. 版本回退或热修复包

    • 向OpenUBMC社区提交Bug报告,定位具体提交变更(git diff between 25.09 and 25.12)。
    • 推送热修复补丁(hotfix)更新 mctp_drv.kodwc3.ko 驱动。
  3. 加固异常处理机制

    • 在关键中断上下文中增加指针合法性校验。
    • 启用内核的CONFIG_DEBUG_RODATACONFIG_STRICT_KERNEL_RWX等安全选项,提前捕获非法执行。

关联实体与系统关系

实体 关联性说明
S920X20 问题发生的硬件平台,搭载Hi1711 BMC模块
Hi1711 Chip 使用的BMC芯片,不支持I2C clock stretching,可能存在底层驱动适配问题
OpenUBMC25.12 引发问题的固件版本,与旧版25.09相比存在驱动或内核变更
mctp_drv 直接涉及崩溃的驱动模块,位于调用栈顶端
dwc3 USB3.0控制器驱动,负责处理Type-C连接中断
BMC Log 提供了完整的内核Oops日志,是定位问题的核心依据

总结

项目 内容
问题本质 OpenUBMC2512 + Hi1711平台下,USB中断处理中因驱动兼容性导致内核非法执行
影响范围 所有使用Hi1711 BMC模块并升级至2512 LTS版本的S920X20设备
紧急程度 :warning: 高(影响维护通道可用性)
推荐措施 1. 暂停该组合的部署
2. 反馈至OpenUBMC社区或厂商
3. 提供降级指南至25.09

建议尽快联系 OpenUBMC 开源社区华为技术支持团队,提供完整日志以推进问题修复。

你好,请提供完整的一键收集到wangxin570@huawei.com,我们分析下

2512 SP2的内核驱动已修复此问题