Android示意圖,圖片來源/Google

日前發生Android 手機上的Teams造成用戶無法打911緊急求助電話情形。Google和微軟都未說明原因,不過一名研究人員本周說明他的見解。

Pixel 3用戶11月底以手機撥911,電話響了一聲後,手機就卡住沒有回應。Google研究後,僅指出這是Teams App和底層Android系統發生「不小心互動」的結果。Google認為僅Android 10版本以上手機安裝了微軟Teams App,卻又沒有登入時會發生這情形。

前XDA總編,現任Esper資深技術編輯的Mishaal Rahman和其友人合作找出原因出在Android程式碼和Teams一連串錯誤造成的結果。根本原因在Android要求第三方打電話的App要註冊PhoneAccount加入Android的TelecomManager服務,不論是打普通電話或是緊急電話。Teams可以打普通電話,但不能打緊急電話。有趣的是,一旦使用者撥緊急電話時,Android緊急電話服務卻載入所有打普通電話的App PhoneAccount清單。

由於Teams不能打緊急電話,此時Android緊急電話服務的判斷邏輯會按多種條件,找出下一個遞補名單。通常也不難,因為註冊PhoneAccount的App也不多。但這時又碰上另一個Teams的問題:若用戶手機上的Teams App未登入,Teams App每次當掉或重啟(稱為冷啟動)時,就會建立新的UUID(Universally Unique Identifier)來產生PhoneAccount instance。多次之後形成重複的PhoneAccount instance。於是當Android緊急電話服務在尋找遞補名單時,碰到衝突的Instance而引發整數溢位或下溢錯誤(integer overflow/underflow),造成緊急電話當掉。

Rahman團隊發現,Teams是在2021年10月底的版本出現這行為,剛好是在Pixel 3用戶事件發生前一個月。

至於為什麼會在Android 10才發生。Rahman認為,Teams是在API level 28+ (Android 9 Pie以後)才開始註冊PhoneAccount,但Google方面則是Android 10才導入這項變更,因此只有這個版本以後的手機才會出現問題。

微軟昨日釋出Teams 1416/1.0.0.2021194504,解決這隻臭蟲。不過這只解決Teams的問題,其他App可能也有類似狀況,導致Android手機無法撥出911緊急電話。Google上周表示會在明年1月4日將新版Android釋出給合作夥伴,包括硬體製造商。


熱門新聞

Advertisement