【CANdelaStudio-从入门到深入到实战】19 会话切换的安全门禁:27服务与状态机深度联动
开篇故事:一个“能进不能出”的ECU
上周,某OEM的测试工程师小李火急火燎地找到我:“老哥,我们新刷的BSW(基础软件)出怪事了——ECU在扩展会话里执行完安全解锁后,切换到默认会话,结果安全访问令牌居然还在!下次进入扩展会话直接就能执行高危写入,连27服务都不用走!”
我让他复现场景:先请求扩展会话(10 03),然后发送27 01(请求种子),再发27 02(发送密钥)解锁成功,执行写入。
接着发10 01切回默认会话,再发10 03切回扩展会话——此时居然直接可以写入,不需要再次安全解锁。
“这不就是典型的‘会话切换时安全状态没清理’吗?”我叹了口气,“你把安全访问当成了全局变量,可它明明是会话绑定的局部变量。”
这个bug在实车路试中非常危险:如果某个诊断仪在扩展会话里解锁后,切换回默认会话,此时另一个诊断仪(比如产线设备)进入扩展会话,就能“捡漏”使用上一个会话残留的安全权限,直接改写关键参数。
痛点拆解:三个“想当然”的认知误区
误区1:安全解锁是全局状态,切换会话不影响
反例代码(常见于初稿BSW实现):
classDangerousSessionManager: