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