软件bug致命的经典案例: Therac-25医疗事故

640x_fmt=png

Therac-25的软件是用汇编语言编写的,该机器还使用了自己的操作系统。它的结构如下:

640x_fmt=jpeg

严重事故

在1985年6月3日,有一位妇女在接受乳腺癌的治疗,她的治疗方案是接受200辐射吸收剂量的照射。但当机器供电之后,病人感到了巨大的热量,在她不知情的情况下,病人已经接受了10000到20000剂量的照射。最后病人还活着,但由于辐射的关系,她失去了左乳房和她的左手臂。

640x_fmt=jpeg

原因分析

Therac-25的软件包含一些严重的bug。此事件发生时,所发射的是高能量的电子束,而不是预期的低能量电子束,而且设备对应的零件没有让电子束进入X射线腔中。以前的机种有硬件互锁机制以避免这种情形发生,而Therac-25取消了硬件互锁机制,为了安全起见改用软件的互锁机制。软件互锁机制在有竞争危害时会失效。其缺陷如下:有一个测试程序中一字节的计数器常常会溢位,若操作员恰好在计数器溢位时输入命令,软件互锁机制会失效。

高能量的电子束给予的能量是理想辐射剂量的100倍,是可能会造成β辐射的致命剂量。患者Ray Cox描述其感觉像“强烈的电击”,他因此尖叫跑出诊疗室。几天后病人开始出现辐射灼伤,病人也开始出现辐射过量的症状,其中有三个病患后来因为辐射过量而死亡。

软件中包含一些致命的bug,譬如:

互斥问题:设备的控制行程没有和操作员界面的行程建立互斥锁,因此若操作员设定的太快,就有可能有race condition。这部分在测试时没有测到,因为操作员需要一段时间熟悉相关操作,才能输入的够快,触发此一失效模式。

运算溢出:软件中有设定旗标变数,但是有变化时会让变量加1,而不是将其设定为固定的非零值,因此偶尔会出现算术溢位,让旗标变量变为0,软件就会跳过安全相关的检查。

….

640x_fmt=png

如果觉得好,请

转发

转发

转发

来源:Linux阅码场

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月22日
下一篇 2018年6月22日

相关推荐