嵌入式系統工程師,小小軟件碼錯誤也能殺人!
不良軟件碼可能殺人嗎?答案是肯定的,而且悲劇顯然已經(jīng)發(fā)生。
最近豐田汽車(chē)(Toyota Motor)在美國卷進(jìn)了一樁官司,原告律師指稱(chēng)豐田一款2005年份Camry車(chē)款在2007年于美國奧克拉荷馬高速公路上發(fā)生的一場(chǎng)暴沖死亡車(chē)禍,主因就是該車(chē)款內的電子節流閥控制系統軟體碼發(fā)生錯誤。
據了解,在上述案件審訊過(guò)程中,檢視過(guò)豐田電子節流閥系統軟件碼的嵌入式系統專(zhuān)家作證指出,他們發(fā)現到豐田系統軟件碼的缺陷,而其內部的錯誤碼就是造成車(chē)輛無(wú)預警暴沖的原因。參與該事故調查的Barr Group技術(shù)長(cháng)暨共同創(chuàng )辦人Michael Barr表示:“我們已經(jīng)證實(shí),只是一個(gè)小小的記憶體位元翻轉(bit flip),就會(huì )造成駕駛人無(wú)法控制引擎速度,而這種軟體故障是無(wú)法依賴(lài)任何一種故障安全(fail-safe)機制偵測出來(lái)?!?/P>
其實(shí)在這之前,不過(guò)豐田已經(jīng)自認無(wú)罪──因為美國國家高速公路交通安全局(NHTSA)在 2011年2月結束了對豐田汽車(chē)的調查,該單位委託NASA的專(zhuān)家檢視豐田的電子節流閥系統,在為期10個(gè)月的調查期間,并沒(méi)有發(fā)現任何電子缺陷可能導致車(chē)輛暴沖。雖然NASA報告并沒(méi)有排除軟體導致車(chē)輛無(wú)預警加速暴沖的可能性,但嵌入式系統專(zhuān)家們并不認為NASA有足夠時(shí)間進(jìn)行完整的測試。
于是包括Barr Group四位專(zhuān)家在內的一個(gè)七人小組接手NASA的調查任務(wù),深入分析了發(fā)生事故的豐田汽車(chē),并做成了一份長(cháng)達800頁(yè)的調查報告?!拔覀冏隽艘恍?NASA顯然沒(méi)有時(shí)間做的事情?!盉arr表示,首先就是檢視車(chē)用系統的即時(shí)作業(yè)系統,找出“未受保護的關(guān)鍵變量(unprotected critical variables)”,他們觀(guān)察且檢視了“子處理器(sub-CPU)”的軟件原始碼,而且“發(fā)現了電子節流閥故障安全機制中的漏洞與缺陷”。
該專(zhuān)家小組并采用Green Hills模擬器進(jìn)行了模擬:“這進(jìn)一步確認某些動(dòng)作會(huì )在看門(mén)狗未重新設定處理器的情形下失效?!盉arr的小組也獨立檢查了在最壞情況下的堆疊深度 (worst-case stack depth):“我們發(fā)現NASA調查所依據的豐田分析報告有很多嚴重錯誤?!彼赋?,專(zhuān)家們證實(shí):“透過(guò)車(chē)輛測試,那些我們所發(fā)現的缺陷確實(shí)與無(wú)預警暴沖有關(guān);我們還觀(guān)察檢視了汽車(chē)黑盒子內的軟體碼,發(fā)現它會(huì )錯誤記錄車(chē)輛意外前最后幾秒的駕駛人動(dòng)作資訊?!?/P>
值得一提的是,Barr Group的證詞,在去年12月讓豐田面臨數十億美元損失的和解案;因為該和解案,專(zhuān)家們所做的詳細技術(shù)性調查并沒(méi)有被公開(kāi),直到奧克拉荷馬事故審訊進(jìn)行。該和解案雖平息了數百起豐田宣布因為車(chē)輛暴沖而召回檢修所導致的車(chē)輛折價(jià)訴訟,該公司仍須面對數起因為車(chē)輛故障所導致的人員受傷或死亡官司。
因為奧克拉荷馬高速公路事故審訊,專(zhuān)家證詞與發(fā)現得以公開(kāi);到底豐田的電子節流閥控制系統出現了甚么樣的缺陷?
Barr 表示,專(zhuān)家針對2005年份的Camry L4車(chē)款原始碼以及車(chē)內測試,證實(shí)其中有部分關(guān)鍵變量并未受軟體崩潰(corruption)保護,記憶體崩潰的塬始碼也顯現;他相信豐田的工程師應該會(huì )保護大量的變量抵抗軟體與硬體導致的崩潰,但卻未能成功映射(mirror)數個(gè)關(guān)鍵變量,也沒(méi)有建立任何可以抵抗位元翻轉的硬體保護機制。他指出,堆疊溢位(Stack overflow)與軟體錯誤導致記憶體崩潰,而問(wèn)題的關(guān)鍵就在于那些記憶體崩潰,就像是“擦槍走火”。
“就算小至一個(gè)位元翻轉的記憶體崩潰,也能導致程式(task)當機;只要藉由單一硬體事件的擾亂(例如位元翻轉),或是眾多軟體錯誤中的一個(gè)就能發(fā)生,例如我們在軟體碼中看到的緩衝區溢位(buffer overflow)以及競態(tài)條件(race condition)?!盉arr表示:“未經(jīng)測試的任務(wù)失敗可能有上千萬(wàn)種組合,每一種都可能在任何一種車(chē)輛/軟體狀態(tài)下發(fā)生,它們多到來(lái)不及測試?!?/P>
不過(guò)Barr指出:“我們在2005年與2008年份Camry車(chē)款所做的測試顯示,甚至就是某個(gè)當機程式的本身,都可能造成駕駛失去對節流閥控制系統的控制權──而此時(shí)內燃機仍持續作動(dòng)引擎。簡(jiǎn)而言之,豐田確實(shí)安裝了故障安全機制,但其中有漏洞,也無(wú)法以UA透過(guò)軟體的所有方式來(lái)進(jìn)行檢測?!?/P>
在此特別說(shuō)明,以上所說(shuō)的“程式”與智慧型手機或PC上執行的應用程式是一樣的,當軟體偶爾出現當機狀況,我們通常會(huì )重新開(kāi)機;而2005年份的Camry L4有安裝一系列程式,但因為這些程式都意味著(zhù)永遠執行,其中一項若當機就可能造成恐怖的后果。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論