panic: runtime error: missing error handling code in handleVerifyResult
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:
【问题描述】(请对问题进行描述,方便定位问题)
与issue1192类似,TBFT共识模式下,一个攻击节点发送msgbus.VerifyResult类型的消息时,且verifyResult.VerifiedBlock
字段或verifyResult.VerifiedBlock.Header
字段为nil的拜占庭攻击消息包时,其它所有的正常节点收到消息后panic。
具体的现象,操作步骤,前置条件等,尽可能描述清楚,有截图说明更佳
【问题定位分析】
在consensus_tbft_impl.go,通过msgbus
的OnMessage入口传入恶意pverifyResult.VerifiedBlock消息包,随后handle()处理该消息后,调用handleVerifyResult
()方法。过程中没有对关键字段(例如VerifiedBlock.Header
)做nil值判断却直接使用,导致invalid memory 访问。
【系统信息】(请填写系统信息,方便定位问题)
chainmaker-go version: v2.3.4 OS & version :Linux version 5.15.0-105-generic, 20.04.1-Ubuntu docker镜像 version:
Client: Docker Engine - Community Version: 27.0.3 API version: 1.46 Go version: go1.21.11
Server: Docker Engine - Community Engine: Version: 27.0.3 API version: 1.46 (minimum version 1.24) Go version: go1.21.11