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